@@ -634,19 +634,23 @@
# Save deleted IDs for later reuse
my $reuse = $GBL{'id'}{'reuse'};
+ lock($reuse) if $GBL{'share'}{'ok'};
if ($id) {
- lock($reuse) if $GBL{'share'}{'ok'};
if (! exists($$reuse{$tree})) {
$$reuse{$tree} = make_shared([]);
}
my $r_tree = $$reuse{$tree};
if (! exists($$r_tree[$thread_id])) {
- $$r_tree[$thread_id] = make_shared({});
- } elsif (exists($$r_tree[$thread_id]{$id})) {
- warn("ERROR: Duplicate reclaimed object ID ($id) in class
+ tree for $tree in thread $thread_id\n");
- return;
+ $$r_tree[$thread_id] = make_shared([]);
+ } else {
+ foreach (@{$$r_tree[$thread_id]}) {
+ if ($_ == $id) {
+ warn("ERROR: Duplicate reclaimed object ID ($id)
+in class tree for $tree in thread $thread_id\n");
+ return;
+ }
+ }
}
- $$r_tree[$thread_id]{$id} = $id;
+ push(@{$$r_tree[$thread_id]}, $id);
return;
}
@@ -654,9 +658,9 @@
if (exists($$reuse{$tree}) &&
exists($$reuse{$tree}[$thread_id]))
{
- keys(%{$$reuse{$tree}[$thread_id]});
- if ((my $id) = each(%{$$reuse{$tree}[$thread_id]})) {
- return (delete($$reuse{$tree}[$thread_id]{$id}));
+ my $id = pop(@{$$reuse{$tree}[$thread_id]});
+ if (defined($id)) {
+ return $id;
}
}
-
-
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|