summaryrefslogtreecommitdiff
path: root/lib/Hash
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2004-02-07 21:46:59 +0000
committerNicholas Clark <nick@ccl4.org>2004-02-07 21:46:59 +0000
commit754604c44e26572c47a2c15665bf1009e9e5b219 (patch)
treecb12520da5374cfae9410024dfd0091eba19444d /lib/Hash
parente0e97dbabd467d4797d6138693db9ab58187faf3 (diff)
downloadperl-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.t35
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");
+ }
+}