Change 29585 by [EMAIL PROTECTED] on 2006/12/18 16:06:38

        Subject: Re: [PATCH] do not meddle in the affairs of PERL_TRACK_MEMPOOL
        From: Jarkko Hietaniemi <[EMAIL PROTECTED]>
        Date: Sun, 17 Dec 2006 22:17:34 -0500
        Message-ID: <[EMAIL PROTECTED]>
        
        Introduce CopLABEL() macro to deal with labels attached to COPs.

Affected files ...

... //depot/perl/cop.h#134 edit
... //depot/perl/op.c#862 edit
... //depot/perl/scope.h#85 edit

Differences ...

==== //depot/perl/cop.h#134 (text) ====
Index: perl/cop.h
--- perl/cop.h#133~29221~       2006-11-06 14:21:05.000000000 -0800
+++ perl/cop.h  2006-12-18 08:06:38.000000000 -0800
@@ -186,12 +186,20 @@
                                 ? gv_stashpv(CopSTASHPV(c),GV_ADD) : NULL)
 #  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)
+#  ifdef NETWARE
+#    define CopLABEL_set(c,pv) ((CopLABEL(c) = ((pv) ? savepv(pv) : NULL)), 
Safefree(pv), ((pv) = NULL))
+#  else
+#    define CopLABEL_set(c,pv) ((CopLABEL(c) = savesharedpv(pv)), 
Safefree(pv), ((pv) = NULL))
+#  endif
 #  ifdef NETWARE
 #    define CopSTASH_free(c) SAVECOPSTASH_FREE(c)
 #    define CopFILE_free(c) SAVECOPFILE_FREE(c)
+#    define CopLABEL_free(c) SAVECOPLABEL_FREE(c)
 #  else
 #    define CopSTASH_free(c)   PerlMemShared_free(CopSTASHPV(c))
 #    define CopFILE_free(c)    (PerlMemShared_free(CopFILE(c)),(CopFILE(c) = 
NULL))
+#    define CopLABEL_free(c)   (PerlMemShared_free(CopLABEL(c)),(CopLABEL(c) = 
NULL))
 #  endif
 #else
 #  define CopFILEGV(c)         ((c)->cop_filegv)
@@ -206,13 +214,16 @@
 # endif
 #  define CopFILE(c)           (CopFILESV(c) ? SvPVX(CopFILESV(c)) : NULL)
 #  define CopSTASH(c)          ((c)->cop_stash)
+#  define CopLABEL(c)          ((c)->cop_label)
 #  define CopSTASH_set(c,hv)   ((c)->cop_stash = (hv))
 #  define CopSTASHPV(c)                (CopSTASH(c) ? HvNAME_get(CopSTASH(c)) 
: NULL)
    /* cop_stash is not refcounted */
 #  define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
 #  define CopSTASH_eq(c,hv)    (CopSTASH(c) == (hv))
+#  define CopLABEL_set(c,pv)   (CopLABEL(c) = (pv))
 #  define CopSTASH_free(c)     
 #  define CopFILE_free(c)      (SvREFCNT_dec(CopFILEGV(c)),(CopFILEGV(c) = 
NULL))
+#  define CopLABEL_free(c)     
 
 #endif /* USE_ITHREADS */
 

==== //depot/perl/op.c#862 (text) ====
Index: perl/op.c
--- perl/op.c#861~29561~        2006-12-15 18:53:59.000000000 -0800
+++ perl/op.c   2006-12-18 08:06:38.000000000 -0800
@@ -514,19 +514,7 @@
 STATIC void
 S_cop_free(pTHX_ COP* cop)
 {
-    if (cop->cop_label) {
-#ifdef PERL_TRACK_MEMPOOL
-       Malloc_t ptr = (Malloc_t)(cop->cop_label - sTHX);
-       struct perl_memory_debug_header *const header
-               = (struct perl_memory_debug_header *)ptr;
-       /* Only the thread that allocated us can free us. */
-       if (header->interpreter == aTHX)
-#endif
-       {
-           Safefree(cop->cop_label);
-           cop->cop_label = NULL;
-       }
-    }
+    CopLABEL_free(cop);
     CopFILE_free(cop);
     CopSTASH_free(cop);
     if (! specialWARN(cop->cop_warnings))
@@ -4004,7 +3992,7 @@
     cop->op_next = (OP*)cop;
 
     if (label) {
-       cop->cop_label = label;
+       CopLABEL_set(cop, label);
        PL_hints |= HINT_BLOCK_SCOPE;
     }
     cop->cop_seq = seq;

==== //depot/perl/scope.h#85 (text) ====
Index: perl/scope.h
--- perl/scope.h#84~29033~      2006-10-18 01:24:30.000000000 -0700
+++ perl/scope.h        2006-12-18 08:06:38.000000000 -0800
@@ -219,11 +219,15 @@
 #  define SAVECOPSTASH_FREE(c) SAVESHAREDPV(CopSTASHPV(c))
 #  define SAVECOPFILE(c)       SAVEPPTR(CopFILE(c))
 #  define SAVECOPFILE_FREE(c)  SAVESHAREDPV(CopFILE(c))
+#  define SAVECOPLABEL(c)      SAVEPPTR(CopLABEL(c))
+#  define SAVECOPLABEL_FREE(c) SAVESHAREDPV(CopLABEL(c))
 #else
 #  define SAVECOPSTASH(c)      SAVESPTR(CopSTASH(c))
 #  define SAVECOPSTASH_FREE(c) SAVECOPSTASH(c) /* XXX not refcounted */
 #  define SAVECOPFILE(c)       SAVESPTR(CopFILEGV(c))
 #  define SAVECOPFILE_FREE(c)  SAVEGENERICSV(CopFILEGV(c))
+#  define SAVECOPLABEL(c)      SAVEPPTR(CopLABEL(c))
+#  define SAVECOPLABEL_FREE(c) SAVEPPTR(CopLABEL(c))
 #endif
 
 #define SAVECOPLINE(c)         SAVEI32(CopLINE(c))
End of Patch.

Reply via email to