Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : val khokhlov                         2:550/180      18 Jun 2003  12:56:42
 To : All
 Subject : perlembed & threads
 -------------------------------------------------------------------------------- 
 
 
         сабж под 5.6.0 вылетает под виндой, в общем-то на ровном месте:
 [sub1() вызывается после _beginthread() из только что созданного треда]
 
   sub1() { cperl = perl_init_clone(); }
   sub2() { perl_done(); _endthread(); }
   perl_init_clone() {
     p = perl_clone(perl);
     return p;
   }
   perl_done() {
     p = Perl_get_context();
     perl_destruct(p);                 // <--- вот здесь вылетает
     perl_free(p);
   }
         при этом вывод указателей (cperl, perl, p) показывает, что они
 установлены правильно (perl - от основной программы, cperl==p - от треда)
         причем если в одном блоке клонировать перл и сразу его уничтожить
 подобным приведенному кодом, то проблем нет.
 
         но это еще не самое страшное! самое страшное - это то, что
 perl_init_clone() при вызове clone() вылетает, причем очень странно. в binkd
 есть два семейства тредов - серверы и клиенты. перл клонируется нормально в
 серверных тредах, но при первой же попытке клонировать при вызове из клиентского
 треда вылетает во время обработки perl_clone(). указатель perl все время
 правильно инициализирован из основной проги.
         вылетает в какой-то функции kernel, вызванной из perl56.dll
 
   Good luck!
              val
 
 --- 2*3.1415926535897932384626433832795028841971693993751058 ways to eternity
  * Origin: I noore uu alasseo (2:550/180)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 perlembed & threads   val khokhlov   18 Jun 2003 12:56:42 
Архивное /ru.perl/18203ef061b9.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional