X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=NetWare%2Finterface.c;h=0788e3aab89e9205e19990e626c69b302b65e91c;hb=5fb77da43fd55ef9c3a8599c3ab23fdee9f25053;hp=c526fbd6be0754a9cfaf2d0254adc7fe2f8cd9c6;hpb=afd1eb533c8ea286efcac6fd054ae7cebaf0dfe3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/NetWare/interface.c b/NetWare/interface.c index c526fbd..0788e3a 100644 --- a/NetWare/interface.c +++ b/NetWare/interface.c @@ -24,7 +24,9 @@ static void xs_init(pTHX); EXTERN_C int RunPerl(int argc, char **argv, char **env); EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp); -EXTERN_C void boot_DynaLoader (pTHXo_ CV* cv); +EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); + +EXTERN_C BOOL Remove_Thread_Ctx(void); ClsPerlHost::ClsPerlHost() @@ -80,8 +82,17 @@ void ClsPerlHost::PerlDestroy(PerlInterpreter *my_perl) { perl_destruct(my_perl); // Destructor for Perl. +} + +void +ClsPerlHost::PerlFree(PerlInterpreter *my_perl) +{ perl_free(my_perl); // Free the memory allocated for Perl. + // Remove the thread context set during Perl_set_context + // This is added here since for web script there is no other place this gets executed + // and it cannot be included into cgi2perl.xs unless this symbol is exported. + Remove_Thread_Ctx(); } /*============================================================================================ @@ -141,23 +152,7 @@ int RunPerl(int argc, char **argv, char **env) if(exitstatus == 0) { #if defined(TOP_CLONE) && defined(USE_ITHREADS) // XXXXXX testing - # ifdef PERL_OBJECT - CPerlHost *h = new CPerlHost(); - new_perl = perl_clone_using(my_perl, 1, - h->m_pHostperlMem, - h->m_pHostperlMemShared, - h->m_pHostperlMemParse, - h->m_pHostperlEnv, - h->m_pHostperlStdIO, - h->m_pHostperlLIO, - h->m_pHostperlDir, - h->m_pHostperlSock, - h->m_pHostperlProc - ); - CPerlObj *pPerl = (CPerlObj*)new_perl; - # else - new_perl = perl_clone(my_perl, 1); - # endif + new_perl = perl_clone(my_perl, 1); exitstatus = perl_run(new_perl); // Run Perl. PERL_SET_THX(my_perl); @@ -167,12 +162,15 @@ int RunPerl(int argc, char **argv, char **env) } nlm.PerlDestroy(my_perl); } + if(my_perl) + nlm.PerlFree(my_perl); #ifdef USE_ITHREADS if (new_perl) { PERL_SET_THX(new_perl); nlm.PerlDestroy(new_perl); + nlm.PerlFree(my_perl); } #endif @@ -190,7 +188,7 @@ int RunPerl(int argc, char **argv, char **env) // IPerlHost* AllocStdPerl() { - return new ClsPerlHost(); + return (IPerlHost*) new ClsPerlHost(); } @@ -202,7 +200,7 @@ IPerlHost* AllocStdPerl() // void FreeStdPerl(IPerlHost* pPerlHost) { - delete (ClsPerlHost*) pPerlHost; + if (pPerlHost) + delete (ClsPerlHost*) pPerlHost; } -