summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorSteve Hay <SteveHay@planit.com>2006-12-04 14:31:08 +0000
committerSteve Hay <SteveHay@planit.com>2006-12-04 14:31:08 +0000
commitc254be07ec6b40dded57c0e5907b1bdfaf3d828d (patch)
tree7e6a88b958c428fda7e4fe234ae2453ec0c28e23 /win32
parentb62d2d15211eac1c5b0041f838bdf37abe63e1ac (diff)
downloadperl-c254be07ec6b40dded57c0e5907b1bdfaf3d828d.tar.gz
Change #29424 may well be correct in itself, but currently doesn't
work when perl is built with PERL_IMPLICIT_SYS because PERLIO_TERM uses PerlMemShared_free() which, in that case, involves the perlhost that has already been freed itself by perl_free(), which is called before PERL_SYS_TERM(). The order of perl_destruct(), perl_free(), PERL_SYS_TERM() cannot be changed (it is advertised in perlembed for a start), so just revert #29424 and the appropriate parts of #29442 for now. Perhaps PL_perlio_fd_refcnt needs allocating differently, or else the perlhost needs freeing later (after PerlIO)? p4raw-id: //depot/perl@29451
Diffstat (limited to 'win32')
-rw-r--r--win32/perllib.c16
-rw-r--r--win32/win32.c5
-rw-r--r--win32/wince.c5
3 files changed, 9 insertions, 17 deletions
diff --git a/win32/perllib.c b/win32/perllib.c
index d1afa163c8..1e4ba09001 100644
--- a/win32/perllib.c
+++ b/win32/perllib.c
@@ -248,28 +248,18 @@ RunPerl(int argc, char **argv, char **env)
exitstatus = perl_run(my_perl);
#endif
}
-
+
perl_destruct(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_destruct(new_perl);
perl_free(new_perl);
}
#endif
-
+ PERL_SYS_TERM();
return (exitstatus);
}
diff --git a/win32/win32.c b/win32/win32.c
index a7c409fb9c..d53741c9ef 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -4902,10 +4902,11 @@ Perl_win32_init(int *argcp, char ***argvp)
void
Perl_win32_term(void)
{
- dTHX;
HINTS_REFCNT_TERM;
OP_REFCNT_TERM;
- PERLIO_TERM;
+ /* Can't call PERLIO_TERM here because that calls PerlMemShared_free()
+ * but we're too late for that (at least when using PERL_IMPLICIT_SYS)
+ * since we've already done perl_free(). */
MALLOC_TERM;
}
diff --git a/win32/wince.c b/win32/wince.c
index 846a33b800..6e876a8030 100644
--- a/win32/wince.c
+++ b/win32/wince.c
@@ -2660,10 +2660,11 @@ Perl_win32_init(int *argcp, char ***argvp)
DllExport void
Perl_win32_term(void)
{
- dTHX;
HINTS_REFCNT_TERM;
OP_REFCNT_TERM;
- PERLIO_TERM;
+ /* Can't call PERLIO_TERM here because that calls PerlMemShared_free()
+ * but we're too late for that (at least when using PERL_IMPLICIT_SYS)
+ * since we've already done perl_free(). */
MALLOC_TERM;
}