summaryrefslogtreecommitdiffstats
path: root/Stash.xs
diff options
context:
space:
mode:
Diffstat (limited to 'Stash.xs')
-rw-r--r--Stash.xs10
1 files changed, 10 insertions, 0 deletions
diff --git a/Stash.xs b/Stash.xs
index 17b9c64..4161ac6 100644
--- a/Stash.xs
+++ b/Stash.xs
@@ -389,18 +389,28 @@ add_package_symbol(self, variable, initial=NULL, ...)
switch (variable.type) {
case VAR_SCALAR:
+ if (GvSV(glob))
+ SvREFCNT_dec(GvSV(glob));
GvSV(glob) = val;
break;
case VAR_ARRAY:
+ if (GvAV(glob))
+ SvREFCNT_dec((SV*)GvAV(glob));
GvAV(glob) = (AV*)val;
break;
case VAR_HASH:
+ if (GvHV(glob))
+ SvREFCNT_dec((SV*)GvHV(glob));
GvHV(glob) = (HV*)val;
break;
case VAR_CODE:
+ if (GvCV(glob))
+ SvREFCNT_dec((SV*)GvCV(glob));
GvCV(glob) = (CV*)val;
break;
case VAR_IO:
+ if (GvIO(glob))
+ SvREFCNT_dec((SV*)GvIO(glob));
GvIOp(glob) = (IO*)val;
break;
}