Мне интересно, безопасна ли множественная инициализация движка perl в одном и том же процессе. Под инициализацией я подразумеваю такую комбинацию:
PERL_SYS_INIT3(&argc,&argv,&env);
my_perl = perl_alloc();
perl_construct(my_perl);
perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
perl_run(my_perl);
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
и это делается один за другим, без какого-либо параллелизма.
Моя проблема в том, что некоторые сценарии perl вызывают сбой движка perl (внутри Perl_op_free) во время второго запуска. Я изменил perl.exe (perlmain.c) просто для запуска движка несколько раз без моего мусора, и я получил тот же результат:
//perlmain.c
int
main(int argc, char **argv, char **env)
{
int res;
res = RunPerl(argc,argv,env);
res = RunPerl(argc,argv,env);
return res;
}
Многократная инициализация запрещена? Или это нужно сделать по-другому? Я пробовал Perl движки с 5,8 до 5,18, у всех, похоже, такая же проблема.
Задача ещё не решена.
Других решений пока нет …