diff options
author | Nicholas Clark <nick@ccl4.org> | 2004-02-07 21:46:59 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2004-02-07 21:46:59 +0000 |
commit | 754604c44e26572c47a2c15665bf1009e9e5b219 (patch) | |
tree | cb12520da5374cfae9410024dfd0091eba19444d /lib/Hash | |
parent | e0e97dbabd467d4797d6138693db9ab58187faf3 (diff) | |
download | perl-754604c44e26572c47a2c15665bf1009e9e5b219.tar.gz |
deleting keys in restricted hashes was leaking the entry. Yow!
p4raw-id: //depot/perl@22281
Diffstat (limited to 'lib/Hash')
-rw-r--r-- | lib/Hash/Util.t | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/lib/Hash/Util.t b/lib/Hash/Util.t index 1c77728c27..8ed557f1a3 100644 --- a/lib/Hash/Util.t +++ b/lib/Hash/Util.t @@ -6,7 +6,7 @@ BEGIN { chdir 't'; } } -use Test::More tests => 159; +use Test::More tests => 173; use strict; my @Exported_Funcs; @@ -290,3 +290,36 @@ like( $@, qr/^Attempt to access disallowed key 'I_DONT_EXIST' in a restricted ha my $hash_seed = hash_seed(); ok($hash_seed >= 0, "hash_seed $hash_seed"); + +{ + package Minder; + my $counter; + sub DESTROY { + --$counter; + } + sub new { + ++$counter; + bless [], __PACKAGE__; + } + package main; + + for my $state ('', 'locked') { + my $a = Minder->new(); + is ($counter, 1, "There is 1 object $state"); + my %hash; + $hash{a} = $a; + is ($counter, 1, "There is still 1 object $state"); + + lock_keys(%hash) if $state; + + is ($counter, 1, "There is still 1 object $state"); + undef $a; + is ($counter, 1, "Still 1 object $state"); + delete $hash{a}; + is ($counter, 0, "0 objects when hash key is deleted $state"); + $hash{a} = undef; + is ($counter, 0, "Still 0 objects $state"); + %hash = (); + is ($counter, 0, "0 objects after clear $state"); + } +} |