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()
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();
}
/*============================================================================================
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);
}
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
//
IPerlHost* AllocStdPerl()
{
- return new ClsPerlHost();
+ return (IPerlHost*) new ClsPerlHost();
}
//
void FreeStdPerl(IPerlHost* pPerlHost)
{
- delete (ClsPerlHost*) pPerlHost;
+ if (pPerlHost)
+ delete (ClsPerlHost*) pPerlHost;
}
-