This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
My re-implementation of hv_clear_placeholders was buggy - not sure why
[perl5.git] / 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;
 
        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)
            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;
                }
                    HvPLACEHOLDERS(hv) = 0;
                    return;
                }
+           } else {
+               oentry = &HeNEXT(entry);
+               first = 0;
            }
        }
     } while (--i >= 0);
            }
        }
     } while (--i >= 0);