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

ksvs ksvs1996 на ymail.com
Вт Ноя 27 07:04:58 PST 2012


Дочернии процессы сами вызывают exit, когда им родитель говорит, что все, спасибо.


________________________________
From: Stanislaw Pusep <creaktive на gmail.com>
To: Moscow.pm group <moscow-pm на pm.org> 
Sent: Tuesday, 27 November 2012, 16:34
Subject: Re: [Moscow.pm] Attempt to free unreferenced scalar: SV 0x2929db2c during global destruction




Спасибо.
>
>А я, наивно, перенес создание $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
>

-- 
Moscow.pm mailing list
moscow-pm на pm.org | http://moscow.pm.org   А почему в а не


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