This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Replace sv_catsv_mg and sv_catpvn_mg, and move the obsolete bodies to
[perl5.git] / NetWare / interface.c
index c526fbd..0788e3a 100644 (file)
@@ -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;
 }
 
-