Comment to record why we can't clear placeholders in hsplit
Nicholas Clark [Sat, 7 Feb 2004 22:32:44 +0000 (22:32 +0000)]
p4raw-id: //depot/perl@22282

hv.c

diff --git a/hv.c b/hv.c
index 669e55a..e71759f 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -1038,6 +1038,11 @@ S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
 STATIC void
 S_hsplit(pTHX_ HV *hv)
 {
+    /* Can't make this clear any placeholders first for non-restricted hashes,
+       as Storable rebuilds restricted hashes by putting in all the
+       placeholders (first) before turning on the readonly flag.  Hence midway
+       through restoring the hash there are placeholders which need to remain
+       even though the hash isn't (currently) flagged as restricted. */
     register XPVHV* xhv = (XPVHV*)SvANY(hv);
     I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
     register I32 newsize = oldsize * 2;