Patch from Andreas.
[p5sagit/p5-mst-13.2.git] / scope.c
diff --git a/scope.c b/scope.c
index 12f3595..5ad043c 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -152,7 +152,7 @@ GV *gv;
     GP *ogp = GvGP(gv);
 
     SSCHECK(3);
-    SSPUSHPTR(gv);
+    SSPUSHPTR(SvREFCNT_inc(gv));
     SSPUSHPTR(ogp);
     SSPUSHINT(SAVEt_GP);
 
@@ -525,6 +525,7 @@ I32 base;
            gv = (GV*)SSPOPPTR;
             gp_free(gv);
             GvGP(gv) = (GP*)ptr;
+           SvREFCNT_dec(gv);
             break;
        case SAVEt_FREESV:
            ptr = SSPOPPTR;
@@ -595,7 +596,10 @@ I32 base;
            (*SSPOPDPTR)(ptr);
            break;
        case SAVEt_REGCONTEXT:
-           savestack_ix -= SSPOPINT;   /* regexp must have croaked */
+           {
+               I32 delta = SSPOPINT;
+               savestack_ix -= delta;  /* regexp must have croaked */
+           }
            break;
        default:
            croak("panic: leave_scope inconsistency");