|
|
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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/18203ef061b9.html, оценка из 5, голосов 10
|