This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
The #11931 patching misbehaved.
[perl5.git] / sharedsv.c
index 4359694..3427469 100644 (file)
 #define PERL_IN_SHAREDSV_C
 #include "perl.h"
 
-PerlInterpreter* sharedsv_space;
-
 #ifdef USE_ITHREADS
 
+PerlInterpreter* sharedsv_space;
+perl_mutex sharedsv_space_mutex;
+
 /*
   Shared SV
 
@@ -45,6 +46,7 @@ void
 Perl_sharedsv_init(pTHX)
 {
     sharedsv_space = PERL_GET_CONTEXT;
+    MUTEX_INIT(&sharedsv_space_mutex);
 }
 
 /*
@@ -145,9 +147,9 @@ Increments the threadcount of a sharedsv.
 void
 Perl_sharedsv_thrcnt_inc(pTHX_ shared_sv* ssv)
 {
-  SHAREDSvLOCK(ssv);
+  SHAREDSvEDIT(ssv);
   SvREFCNT_inc(ssv->sv);
-  SHAREDSvUNLOCK(ssv);
+  SHAREDSvRELEASE(ssv);
 }
 
 /*
@@ -163,7 +165,6 @@ void
 Perl_sharedsv_thrcnt_dec(pTHX_ shared_sv* ssv)
 {
     SV* sv;
-    SHAREDSvLOCK(ssv);
     SHAREDSvEDIT(ssv);
     sv = SHAREDSvGET(ssv);
     if (SvREFCNT(sv) == 1) {
@@ -195,7 +196,6 @@ Perl_sharedsv_thrcnt_dec(pTHX_ shared_sv* ssv)
     }
     SvREFCNT_dec(sv);
     SHAREDSvRELEASE(ssv);
-    SHAREDSvUNLOCK(ssv);
 }
 
-#endif
+#endif /* USE_ITHREADS */