summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla.pm16
1 files changed, 15 insertions, 1 deletions
diff --git a/Bugzilla.pm b/Bugzilla.pm
index 91e6b00d3..0d6e6af7d 100644
--- a/Bugzilla.pm
+++ b/Bugzilla.pm
@@ -300,7 +300,21 @@ sub custom_field_names {
sub request_cache {
if ($ENV{MOD_PERL}) {
require Apache2::RequestUtil;
- return Apache2::RequestUtil->request->pnotes();
+ my $request = Apache2::RequestUtil->request;
+ my $cache = $request->pnotes();
+ # Sometimes mod_perl doesn't properly call DESTROY on all
+ # the objects in pnotes(), so we register a cleanup handler
+ # to make sure that this happens.
+ if (!$cache->{cleanup_registered}) {
+ $request->push_handlers(PerlCleanupHandler => sub {
+ my $r = shift;
+ foreach my $key (keys %{$r->pnotes}) {
+ delete $r->pnotes->{$key};
+ }
+ });
+ $cache->{cleanup_registered} = 1;
+ }
+ return $cache;
}
return $_request_cache;
}