From 0fd94fa00dc3429814a97c106f2ff0a0550e6ac0 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Sat, 1 Jul 2006 23:10:14 +0000 Subject: Bug 343166: $template->process leaks 512K of RAM per call under mod_perl Patch By Max Kanat-Alexander r=justdave, a=justdave --- Bugzilla.pm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'Bugzilla.pm') 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; } -- cgit v1.2.3-24-g4f1b