summaryrefslogtreecommitdiff
path: root/perl.c
diff options
context:
space:
mode:
authorDave Mitchell <davem@fdisolutions.com>2007-01-15 14:16:53 +0000
committerDave Mitchell <davem@fdisolutions.com>2007-01-15 14:16:53 +0000
commitc301d6064f299b8a77670348b81d25d2d94d6a2f (patch)
tree4661596c73b9a8b1af9f57407939bb72efd14537 /perl.c
parentfb54e853c1d154ca0b17cebf36613cf8e29339fe (diff)
downloadperl-c301d6064f299b8a77670348b81d25d2d94d6a2f.tar.gz
extend threads 'veto cleanup' to perl_free and system stuff
p4raw-id: //depot/perl@29827
Diffstat (limited to 'perl.c')
-rw-r--r--perl.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/perl.c b/perl.c
index f9cebf1807..fdcbcbdaaf 100644
--- a/perl.c
+++ b/perl.c
@@ -580,6 +580,7 @@ perl_destruct(pTHXx)
if (CALL_FPTR(PL_threadhook)(aTHX)) {
/* Threads hook has vetoed further cleanup */
+ PL_veto_cleanup = TRUE;
return STATUS_EXIT;
}
@@ -1325,6 +1326,9 @@ Releases a Perl interpreter. See L<perlembed>.
void
perl_free(pTHXx)
{
+ if (PL_veto_cleanup)
+ return;
+
#ifdef PERL_TRACK_MEMPOOL
{
/*
@@ -1381,7 +1385,7 @@ __attribute__((destructor))
perl_fini(void)
{
dVAR;
- if (PL_curinterp)
+ if (PL_curinterp && !PL_veto_cleanup)
FREE_THREAD_KEY;
}