summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1998-10-17 03:00:40 +0000
committerGurusamy Sarathy <gsar@cpan.org>1998-10-17 03:00:40 +0000
commit9e35f4b3b47f076a1cad0f1048e606c50cb5ac32 (patch)
treec0ad90347af1cff8972c7f5500d889f11d12e3be /sv.c
parent32d8b6e578ec44eac9ae5b98b03f265909d36357 (diff)
downloadperl-9e35f4b3b47f076a1cad0f1048e606c50cb5ac32.tar.gz
skip readonly vars and unref references when doing a reset()
p4raw-id: //depot/perl@1998
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sv.c b/sv.c
index ec224a38b5..ad38a8762e 100644
--- a/sv.c
+++ b/sv.c
@@ -3957,12 +3957,18 @@ sv_reset(register char *s, HV *stash)
}
for (i = 0; i <= (I32) HvMAX(stash); i++) {
for (entry = HvARRAY(stash)[i];
- entry;
- entry = HeNEXT(entry)) {
+ entry;
+ entry = HeNEXT(entry))
+ {
if (!todo[(U8)*HeKEY(entry)])
continue;
gv = (GV*)HeVAL(entry);
sv = GvSV(gv);
+ if (SvTHINKFIRST(sv)) {
+ if (!SvREADONLY(sv) && SvROK(sv))
+ sv_unref(sv);
+ continue;
+ }
(void)SvOK_off(sv);
if (SvTYPE(sv) >= SVt_PV) {
SvCUR_set(sv, 0);