diff options
-rw-r--r-- | Bugzilla.pm | 16 |
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; } |