From f7d1f7b803a9e89be4407d102a48eddd1708e103 Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Fri, 5 Oct 2012 00:49:53 +0800 Subject: Bug 797883: Adds a Bugzilla->process_cache r=LpSolit, a=LpSolit --- Bugzilla.pm | 12 ++++++++++-- Bugzilla/Template.pm | 13 ++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Bugzilla.pm b/Bugzilla.pm index f956f5a0e..6c86fb0fc 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -271,8 +271,7 @@ sub input_params { our $_localconfig; sub localconfig { - $_localconfig ||= read_localconfig(); - return $_localconfig; + return $_[0]->process_cache->{localconfig} ||= read_localconfig(); } sub params { @@ -643,6 +642,15 @@ sub request_cache { return $_request_cache; } +# This is a per-process cache. Under mod_cgi it's identical to the +# request_cache. When using mod_perl, items in this cache live until the +# worker process is terminated. +our $_process_cache = {}; + +sub process_cache { + return $_process_cache; +} + # Private methods # Per-process cleanup. Note that this is a plain subroutine, not a method, diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index 6685a7431..f6796dfc7 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -41,10 +41,6 @@ use constant FORMAT_3_SIZE => [19,28,28]; use constant FORMAT_DOUBLE => '%19s %-55s'; use constant FORMAT_2_SIZE => [19,55]; -# Use a per-process provider to cache compiled templates in memory across -# requests. -our %shared_providers; - # Pseudo-constant. sub SAFE_URL_REGEXP { my $safe_protocols = join('|', SAFE_PROTOCOLS); @@ -982,9 +978,12 @@ sub create { 'default_authorizer' => new Bugzilla::Auth(), }, }; + # Use a per-process provider to cache compiled templates in memory across + # requests. my $provider_key = join(':', @{ $config->{INCLUDE_PATH} }); - $shared_providers{$provider_key} ||= Template::Provider->new($config); - $config->{LOAD_TEMPLATES} = [ $shared_providers{$provider_key} ]; + my $shared_providers = Bugzilla->process_cache->{shared_providers} ||= {}; + $shared_providers->{$provider_key} ||= Template::Provider->new($config); + $config->{LOAD_TEMPLATES} = [ $shared_providers->{$provider_key} ]; local $Template::Config::CONTEXT = 'Bugzilla::Template::Context'; @@ -1051,7 +1050,7 @@ sub precompile_templates { } # Clear out the cached Provider object - undef %shared_providers; + Bugzilla->process_cache->{shared_providers} = undef; } # Under mod_perl, we look for templates using the absolute path of the -- cgit v1.2.3-24-g4f1b