]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 797883: Adds a Bugzilla->process_cache
authorByron Jones <bjones@mozilla.com>
Thu, 4 Oct 2012 16:51:24 +0000 (00:51 +0800)
committerByron Jones <bjones@mozilla.com>
Thu, 4 Oct 2012 16:51:24 +0000 (00:51 +0800)
r=LpSolit, a=LpSolit

Bugzilla.pm
Bugzilla/Template.pm

index ccd38406740471e3dcd66cce46b575a6311dccd0..770e121ca4be9f57223d4cbde464118dabd06bbe 100644 (file)
@@ -270,8 +270,7 @@ sub input_params {
 
 our $_localconfig;
 sub localconfig {
-    $_localconfig ||= read_localconfig();
-    return $_localconfig;
+    return $_[0]->process_cache->{localconfig} ||= read_localconfig();
 }
 
 sub params {
@@ -642,6 +641,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,
index a38d07e7ffe1f1101f9af75a07dad24e01ef07aa..c1e1a5cd9b3fb83f9a8f574a59e3193a5270df68 100644 (file)
@@ -40,10 +40,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);
@@ -981,9 +977,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';
 
@@ -1050,7 +1049,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