From: mkanat%bugzilla.org <> Date: Sat, 1 Jul 2006 23:10:14 +0000 (+0000) Subject: Bug 343166: $template->process leaks 512K of RAM per call under mod_perl X-Git-Tag: bugzilla-2.23.2~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fd94fa00dc3429814a97c106f2ff0a0550e6ac0;p=thirdparty%2Fbugzilla.git Bug 343166: $template->process leaks 512K of RAM per call under mod_perl Patch By Max Kanat-Alexander r=justdave, a=justdave --- diff --git a/Bugzilla.pm b/Bugzilla.pm index 91e6b00d39..0d6e6af7da 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; }