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

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


Это я ошибся
надо 
Net::Curl::Multi->new({});
А я написал
Net::Curl::Multi::new({});


----- Original Message -----
From: ksvs <ksvs1996 на ymail.com>
To: Moscow.pm group <moscow-pm на pm.org>
Cc: 
Sent: Tuesday, 27 November 2012, 17:00
Subject: Re: [Moscow.pm] Attempt to free unreferenced scalar: SV 0x2929db2c during global destruction

Когда объект, наследуемый от Net::Curl::Multi, как в примере, то помогло.

А когда без объектов, то вот что:


> perl 1.pl
Ошибка сегментации(core dumped)
> cat 1.pl
$| = 1;
use strict;
use warnings;

use Net::Curl::Multi;
use Net::Curl::Easy;

sub foo {
        my $multi = Net::Curl::Multi::new({});
        sub {
                my ($easy) = @_;
                $multi->add_handle($easy);
                print $multi, "\n";
        };
}

my $foo = foo();
my $easy = Net::Curl::Easy->new({});
$foo->($easy);


Вывод. Надо уже идти учить объекты.


________________________________
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