summaryrefslogtreecommitdiff
path: root/gv.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1998-11-29 12:40:28 +0000
committerGurusamy Sarathy <gsar@cpan.org>1998-11-29 12:40:28 +0000
commitb099ddc068b2498767e6f04ac167d9633b895ec4 (patch)
treec5565911f062bddb5d68139f8aed5d8489d2a488 /gv.c
parentbfc605f9e1d41dd7493c0c0fcfd1304c238dbe4d (diff)
downloadperl-b099ddc068b2498767e6f04ac167d9633b895ec4.tar.gz
various fixes for race conditions under threads: mutex locks based
on PL_threadnum were seriously flawed, since it means more than one thread could enter the critical region; PL_na was global instead of thread-local; child thread could finish and free thr structures before Thread->new() got around to creating the Thread object; cv_clone() needed locking, as it mucks with PL_comppad and other global data; new_struct_thread() needed to lock template-thread's mutex while copying its data p4raw-id: //depot/perl@2385
Diffstat (limited to 'gv.c')
-rw-r--r--gv.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/gv.c b/gv.c
index 85ac8f9c34..1c4c1295df 100644
--- a/gv.c
+++ b/gv.c
@@ -112,6 +112,7 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
if (doproto) { /* Replicate part of newSUB here. */
SvIOK_off(gv);
ENTER;
+ /* XXX unsafe for threads if eval_owner isn't held */
start_subparse(0,0); /* Create CV in compcv. */
GvCV(gv) = PL_compcv;
LEAVE;