summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2006-05-17 18:38:16 +0100
committerSteve Hay <SteveHay@planit.com>2006-05-17 17:06:26 +0000
commitd8d97e7036087008232bf8da77755f2ab9da8b29 (patch)
tree76f3a1199760ef630c33ba2812dea607086bb996
parentc70c17014268a520cc228ac35b4f4bb6b1372ee7 (diff)
downloadperl-d8d97e7036087008232bf8da77755f2ab9da8b29.tar.gz
Re: [perl #39145] win32, @_ and fork crashing in dounwind
Message-ID: <20060517163816.GN17109@iabyn.com> (Dave's fix, plus a test taken from [perl #39145]) p4raw-id: //depot/perl@28215
-rw-r--r--sv.c2
-rwxr-xr-xt/op/fork.t6
2 files changed, 8 insertions, 0 deletions
diff --git a/sv.c b/sv.c
index c7223c43d1..4c186ec3c4 100644
--- a/sv.c
+++ b/sv.c
@@ -10271,6 +10271,8 @@ Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
ncx->blk_sub.lval = cx->blk_sub.lval;
ncx->blk_sub.retop = cx->blk_sub.retop;
+ ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
+ cx->blk_sub.oldcomppad);
break;
case CXt_EVAL:
ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
diff --git a/t/op/fork.t b/t/op/fork.t
index 588d88b153..b344990fd6 100755
--- a/t/op/fork.t
+++ b/t/op/fork.t
@@ -462,3 +462,9 @@ if ($pid == 0) {
}
EXPECT
1
+########
+# [perl #39145] Perl_dounwind() crashing with Win32's fork() emulation
+sub { @_ = 3; fork ? die "1\n" : die "1\n" }->(2);
+EXPECT
+1
+1