Don't free the original label string when assigning it to cop_label,
Rafael Garcia-Suarez [Wed, 20 Dec 2006 09:30:06 +0000 (09:30 +0000)]
since it comes directly from the parser. (That was making op/goto.t
fail under threads and without debugging on some platforms.)

p4raw-id: //depot/perl@29600

cop.h

diff --git a/cop.h b/cop.h
index 722e135..91f8d45 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -187,10 +187,11 @@ struct cop {
 #  define CopSTASH_set(c,hv)   CopSTASHPV_set(c, (hv) ? HvNAME_get(hv) : NULL)
 #  define CopSTASH_eq(c,hv)    ((hv) && stashpv_hvname_match(c,hv))
 #  define CopLABEL(c)          ((c)->cop_label)
+/* Don't free the original label here, it will be freed by the parser */
 #  ifdef NETWARE
-#    define CopLABEL_set(c,pv) ((CopLABEL(c) = ((pv) ? savepv(pv) : NULL)), Safefree(pv), ((pv) = NULL))
+#    define CopLABEL_set(c,pv) (CopLABEL(c) = ((pv) ? savepv(pv) : NULL))
 #  else
-#    define CopLABEL_set(c,pv) ((CopLABEL(c) = savesharedpv(pv)), Safefree(pv), ((pv) = NULL))
+#    define CopLABEL_set(c,pv) (CopLABEL(c) = savesharedpv(pv))
 #  endif
 #  ifdef NETWARE
 #    define CopSTASH_free(c) SAVECOPSTASH_FREE(c)