summaryrefslogtreecommitdiff
path: root/sv.h
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2012-03-06 14:26:27 +0000
committerDavid Mitchell <davem@iabyn.com>2012-03-06 14:26:27 +0000
commit5bec93bead1c10563a402404de095bbdf398790f (patch)
tree6804fecb854a7340fe5301eb0577d0ebf41173a1 /sv.h
parent1cd16d8ac049ac3ffe94281e35fe9270b854408d (diff)
downloadperl-5bec93bead1c10563a402404de095bbdf398790f.tar.gz
fix slowdown in nested hash freeing
Commit 104d7b69 made sv_clear free hashes iteratively rather than recursively; however, my code didn't record the current hash index when freeing a nested hash, which made the code go quadratic when freeing a large hash with inner hashes, e.g.: my $r; $r->{$_} = { a => 1 } for 1..10_0000; This was noticeable on such things as CPAN.pm being very slow to exit. This commit fixes this by squirrelling away the old hash index in the now-unused SvMAGIC field of the hash being freed.
Diffstat (limited to 'sv.h')
-rw-r--r--sv.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/sv.h b/sv.h
index 935f4fff15..60ff740501 100644
--- a/sv.h
+++ b/sv.h
@@ -440,6 +440,7 @@ union _xivu {
union _xmgu {
MAGIC* xmg_magic; /* linked list of magicalness */
HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
+ STRLEN xmg_hash_index; /* used while freeing hash entries */
};
struct xpv {