[Moscow.pm] Attempt to free unreferenced scalar: SV 0x2929db2c during global destruction

Stanislaw Pusep creaktive на gmail.com
Вт Ноя 27 06:34:02 PST 2012


> Спасибо.
>
> А я, наивно, перенес создание $multi с главного процесса в дочернии.
> И кажется ошибка ушла. Но, наверно, стала реже, и я ее пока не словил.
> Верну как было, и попробую явный base.


А как вы "убиваете" дочерние процессы? Если не убиваете, или убиваете
"насмерть" (без ловушек SIGTERM/SIGINT), то глобальный деструктор дочернего
процесса просто не срабатывает.


> Спасибо за ссылку.
> Но я еще не смотрел в сторону moose и пока не все понимаю.
>
>
> А почему в
>
> https://metacpan.org/source/SYP/AnyEvent-Net-Curl-Queued-0.037/lib/AnyEvent/Net/Curl/Queued/Multi.pm
> строка 168 используется
> $self->socket_action;
> а не
> $self->socket_action(Net::Curl::Multi::CURL_SOCKET_TIMEOUT);
> Кажется в документации на libcurl сказано, что надо использовать второй
> вариант.
>

В случае таймаута, совершенно верно. Но в данном случае, socket_action()
вызывается при "запуске" инстанции Net::Curl::Easy, и выполняет функцию,
так сказать, "прогревки движка" (асинхронный DNS, подключение к прокси).

А почему вы решили использовать Curl, а не AnyEvent::HTTP?
>

У libcurl фичей побольше: http://curl.haxx.se/docs/features.html :)
Лично мне позарез нужны были вот эти:

 - custom least download speed acceptable
 - selectable network interface for outgoing traffic
 - socks5 support
 - asynchronous name resolving
 - Content-Encoding support for deflate and gzip
 - "Transfer-Encoding: chunked" support for "uploads"


> Что-то я не пойму как вы берете последнии хедеры, а не редиректовские.
>

В режиме CURLOPT_FOLLOWLOCATION, libcurl "склеивает" хедеры. Поскольку
HTTP-хедеры заканчиваются "\n\n", то нечто вроде split(/\n\n/, $buffer)
превращает всю цепочку редиректов в аррей. Ну и последний элемент является
последним хедером.


> И почему вы при получении хедеров, если это не html, не обрываете закачку?
>

А как же тогда картинки качать? :)

А удобно пользоваться moose? Так выгдядит странно, не так, как в книжке по
> Perl, что я читал.
>

Весьма удобно, рекомендую!
Это не совсем Moose, это Mouse. Оно кушает на порядок меньше памяти.
(вообще-то Any::Moose, который сам выбирает Moose или Mouse в зависимости
от случая)

________________________________
> From: Stanislaw Pusep <creaktive на gmail.com>
> To: Moscow.pm group <moscow-pm на pm.org>
> Sent: Tuesday, 27 November 2012, 13:55
> Subject: Re: [Moscow.pm] Attempt to free unreferenced scalar: SV
> 0x2929db2c during global destruction
>
>
> Так и есть, бага. Я её и зарепортил, и починил:
> https://github.com/sparky/perl-Net-Curl/pull/1
> Жду, когда автор соизволит протестить :)
> Кстати, легко чинимо самостоятельно. В вашем коде, определите явный "base"
> для создания новых объектов Net::Curl::*:
>
> my $easy = Net::Curl::Easy->new({});
> my $multi = Net::Curl::Multi->new({});
>
> my $share = Net::Curl::Share->new({});
>
>
> Вместо:
>
> my $easy = Net::Curl::Easy->new;
> my $multi = Net::Curl::Multi->new;
>
> my $share = Net::Curl::Share->new;
>
>
> Почему оно так? Тупо опечатка:
> http://stackoverflow.com/a/13576436/1818793
>
> Кстати, комбинация AnyEvent + Net::Curl::Mulii уже существует на CPAN:
> https://metacpan.org/module/AnyEvent::Net::Curl::Queued
>
> 2012/11/27 Alexandr Alexeev <afiskon на gmail.com>
>
> Я не специалист, но похоже на багу в Net::Curl::Multy. Может, зарепортить
> ее?
> >
> >2012/11/27 ksvs <ksvs1996 на ymail.com>:
> >
> >> Привет.
> >> Заменил LWP на AnyEvent, теперь захотел заменить его на
> Net::Curl::Multy.
> >> Но периодически при завершении программы стали появляться сообщения:
> >> "Attempt to free unreferenced scalar: SV 0x2929db2c during global
> destruction"
> >> Хотя с заменой на Curl у меня не добавилось никаких глобальных
> переменных.
> >> Что это может быть и как с ним бороться?
> >>
> >>
> >> Нашел, что можно пересобрать perl.
> >>
> >> Recompiling libperl with DEBUG_LEAKING_SCALARS, (and maybe
> >> DEBUG_LEAKING_SCALARS_FORK_DUMP and maybe DEBUG_LEAKING_SCALARS_ABORT)
> may
> >> give you some more information about where the problem is coming from.
> >>
> >> А может можно как-то проше?
> >>
> >> --
> >> Moscow.pm mailing list
> >> moscow-pm на pm.org | http://moscow.pm.org
> >
> >
> >
> >--
> >Best regards,
> >Alex Alexeev
> >http://twitter.com/afiskon
> >
> >--
> >Moscow.pm mailing list
> >moscow-pm на pm.org | http://moscow.pm.org
> >
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.orgА почему в а не
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121127/7fd9ae06/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm