My re-implementation of hv_clear_placeholders was buggy - not sure why
authorNicholas Clark <nick@ccl4.org>
Fri, 27 Feb 2004 10:27:38 +0000 (10:27 +0000)
committerNicholas Clark <nick@ccl4.org>
Fri, 27 Feb 2004 10:27:38 +0000 (10:27 +0000)
the tests still passed. Fixed.

p4raw-id: //depot/perl@22391

hv.c

diff --git a/hv.c b/hv.c
index e71759f..28c04de 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -1501,7 +1501,7 @@ Perl_hv_clear_placeholders(pTHX_ HV *hv)
        if (!entry)
            continue;
 
-       for (; entry; first=0, oentry = &HeNEXT(entry), entry = *oentry) {
+       for (; entry; entry = *oentry) {
            if (HeVAL(entry) == &PL_sv_placeholder) {
                *oentry = HeNEXT(entry);
                if (first && !*oentry)
@@ -1519,6 +1519,9 @@ Perl_hv_clear_placeholders(pTHX_ HV *hv)
                    HvPLACEHOLDERS(hv) = 0;
                    return;
                }
+           } else {
+               oentry = &HeNEXT(entry);
+               first = 0;
            }
        }
     } while (--i >= 0);