The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Проблема с тридами. (/usr/bin/perl: double free or corruptio..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Проблема с тридами. (/usr/bin/perl: double free or corruptio..."  
Сообщение от mthawk email(ok) on 14-Сен-08, 14:39 
Доброго времени суток.
Использую threads
Порождаю новый трид $NET_THREAD=threads->create("netdaemon");
В процессе работы может возникнуть необходимость завершить трид....

Делаю это посылкой ему сигнала INT.
$NET_THREAD->kill('INT');
$NET_THREAD->join;
В триде в свою очередь определен обработчик сигнала
$SIG{INT}=sub
        {
        $socket->close;
        unlink NETDAEMONSOCK;
        threads->exit();
        };

.... и запустить его заново
$NET_THREAD=threads->create("netdaemon");

И все снова начинает работать. Но если завершается главный(материнский) процесс, делает он это со следующим сообщением:

*** glibc detected *** /usr/bin/perl: double free or corruption (!prev): 0x0a8b21a8 ***
======= Backtrace: =========
/lib/libc.so.6[0x8b6e71]
/lib/libc.so.6(cfree+0x90)[0x8ba4b0]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_safesysfree+0x21)[0x5e6aae1]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_pregfree+0x4b)[0x5e56a9b]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(perl_destruct+0xd07)[0x5e203c7]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/threads/threads.so[0x1d23bb]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/threads/threads.so(XS_threads_join+0x49c)[0x1d2e6c]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_pp_entersub+0x40d)[0x5e8043d]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_runops_standard+0x1f)[0x5e7989f]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so[0x5e19ffe]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_call_sv+0x5e6)[0x5e1e806]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_sighandler+0x228)[0x5e6cb58]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_despatch_signals+0xb7)[0x5e6c8f7]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(Perl_runops_standard+0x38)[0x5e798b8]
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so(perl_run+0x2ee)[0x5e1f10e]
/usr/bin/perl(main+0x13e)[0x804921e]
/lib/libc.so.6(__libc_start_main+0xe0)[0x864f90]
/usr/bin/perl[0x8049021]
======= Memory map: ========
00110000-00111000 r-xp 00110000 00:00 0          [vdso]
00111000-00113000 r-xp 00000000 08:06 58885      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/PerlIO/scalar/scalar.so
00113000-00114000 rwxp 00001000 08:06 58885      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/PerlIO/scalar/scalar.so
00114000-00133000 r-xp 00000000 08:06 640729     /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBI/DBI.so
00133000-00134000 rwxp 0001e000 08:06 640729     /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBI/DBI.so
00134000-0013d000 r-xp 00000000 08:06 649186     /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/List/Util/Util.so
0013d000-0013e000 rwxp 00008000 08:06 649186     /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/List/Util/Util.so
0013e000-00141000 r-xp 00000000 08:06 58712      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Fcntl/Fcntl.so
00141000-00142000 rwxp 00002000 08:06 58712      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Fcntl/Fcntl.so
00142000-00148000 r-xp 00000000 08:06 679494     /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Time/HiRes/HiRes.so
00148000-00149000 rwxp 00005000 08:06 679494     /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Time/HiRes/HiRes.so
00149000-0014c000 r-xp 00000000 08:06 58696      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Digest/MD5/MD5.so
0014c000-0014d000 rwxp 00003000 08:06 58696      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Digest/MD5/MD5.so
0014d000-00151000 r-xp 00000000 08:06 679640     /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/IO/IO.so
00151000-00152000 rwxp 00003000 08:06 679640     /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/IO/IO.so
00152000-00157000 r-xp 00000000 08:06 58888      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Socket/Socket.so
00157000-00158000 rwxp 00004000 08:06 58888      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Socket/Socket.so
00158000-00167000 r-xp 00000000 08:06 679773     /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/WWW/Curl/Curl.so
00167000-00168000 rwxp 0000f000 08:06 679773     /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/WWW/Curl/Curl.so
00168000-001a8000 r-xp 00000000 08:06 604138     /usr/lib/libcurl.so.4.0.0
001a8000-001a9000 rwxp 00040000 08:06 604138     /usr/lib/libcurl.so.4.0.0
001a9000-001ab000 r-xp 00000000 08:06 10268      /usr/lib/gconv/KOI8-R.so
001ab000-001ad000 rwxp 00001000 08:06 10268      /usr/lib/gconv/KOI8-R.so
001ad000-001c9000 r-xp 00000000 08:06 58726      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/POSIX/POSIX.so
001c9000-001ca000 rwxp 0001b000 08:06 58726      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/POSIX/POSIX.so
001ca000-001cd000 r-xp 00000000 08:06 630801     /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Device/SerialPort/SerialPort.so
001cd000-001ce000 rwxp 00002000 08:06 630801     /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Device/SerialPort/SerialPort.so
001ce000-001d8000 r-xp 00000000 08:06 58923      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/threads/threads.so
001d8000-001d9000 rwxp 00009000 08:06 58923      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/threads/threads.so
001d9000-001e2000 r-xp 00000000 08:06 58922      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/threads/shared/shared.so
001e2000-001e3000 rwxp 00009000 08:06 58922      /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/threads/shared/shared.so
001e3000-001f5000 r-xp 00000000 08:06 649093     /usr/lib/perl5/site_perl/5.8.8/i386-lАварийный останов


В чем может быть проблема?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • ..., BigHo, 14:39 , 15-Сен-08, (1)  
    • ..., NuINu, 16:35 , 15-Сен-08, (2)  
      • ..., mthawk, 10:51 , 16-Сен-08, (3)  

Сообщения по теме [Сортировка по времени | RSS]


1. "..."  
Сообщение от BigHo on 15-Сен-08, 14:39 
если работать таким образом (с использованием сигналов), то лучшим выбором бы освободить главный поток от любой работы с сигналами, т.е. их игнорировать, и заставить выполнять самую легкую работу, где нельзя ошибится - в цикле pause или еще чего.

Это связано не столько с языком программирования, сколько самой многопоточностью в POSIX ОС - логика всей программы сильно усложняется при одновременном использовании сигналов и потоков. Если функция обработки сигнала сама по себе проста (например: установка глобальной переменной, которую опрашивает в цикле один или несколько потоков), то это еще будет работать стабильно. Пытаться управлять многопоточной программой не будет лучшим выбором.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "..."  
Сообщение от NuINu (??) on 15-Сен-08, 16:35 
я посмотрел perldoc threads


BUGS
       Parent-Child threads.
           On some platforms it might not be possible to destroy "parent" threads while there are still existing child "threads".

           This will possibly be fixed in later versions of perl.

думаю это отвечает на ваш вопрос.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "..."  
Сообщение от mthawk email(??) on 16-Сен-08, 10:51 
On
>some platforms it might not be possible to destroy "parent" threads
>while there are still existing child "threads".
>
>           This
>will possibly be fixed in later versions of perl.
>
>думаю это отвечает на ваш вопрос.

Здравствуйте.
Остается непонятным - почему при первом запуске трида останов главного процесса проходит нормально. А если перезапусить трид - крашит.
Но скорее всего это действительно отвечает на вопрос.
Спасибо за участие.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру