diff options
-rw-r--r-- | perlio.c | 17 | ||||
-rw-r--r-- | win32/perllib.c | 16 |
2 files changed, 18 insertions, 15 deletions
@@ -2398,6 +2398,7 @@ PerlIO_cleanup(pTHX) void PerlIO_teardown(pTHX) /* Call only from PERL_SYS_TERM(). */ { + #ifdef DEBUGGING { /* By now all filehandles should have been closed, so any @@ -2416,22 +2417,14 @@ void PerlIO_teardown(pTHX) /* Call only from PERL_SYS_TERM(). */ #endif if (PL_perlio_fd_refcnt_size /* Assuming initial size of zero. */ && PL_perlio_fd_refcnt) { -#ifdef PERL_TRACK_MEMPOOL - Malloc_t ptr = (Malloc_t)((char*)PL_perlio_fd_refcnt-sTHX); - struct perl_memory_debug_header *const header - = (struct perl_memory_debug_header *)ptr; - /* Only the thread that allocated us can free us. */ - if (header->interpreter == aTHX) -#endif - { - PerlMemShared_free(PL_perlio_fd_refcnt); /* Not Safefree() because was allocated with PerlMemShared_realloc(). */ - PL_perlio_fd_refcnt = NULL; - PL_perlio_fd_refcnt_size = 0; - } + PerlMemShared_free(PL_perlio_fd_refcnt); /* Not Safefree() because was allocated with PerlMemShared_realloc(). */ + PL_perlio_fd_refcnt = NULL; + PL_perlio_fd_refcnt_size = 0; } #ifdef USE_ITHREADS MUTEX_UNLOCK(&PL_perlio_mutex); #endif + } diff --git a/win32/perllib.c b/win32/perllib.c index 1e4ba09001..d1afa163c8 100644 --- a/win32/perllib.c +++ b/win32/perllib.c @@ -248,18 +248,28 @@ RunPerl(int argc, char **argv, char **env) exitstatus = perl_run(my_perl); #endif } - + perl_destruct(my_perl); - perl_free(my_perl); #ifdef USE_ITHREADS if (new_perl) { PERL_SET_THX(new_perl); perl_destruct(new_perl); + PERL_SET_THX(my_perl); + } +#endif + + PERL_SYS_TERM(); + + perl_free(my_perl); + +#ifdef USE_ITHREADS + if (new_perl) { + PERL_SET_THX(new_perl); perl_free(new_perl); } #endif - PERL_SYS_TERM(); + return (exitstatus); } |