Commit f7d1f7b8 authored by Byron Jones's avatar Byron Jones

Bug 797883: Adds a Bugzilla->process_cache

r=LpSolit, a=LpSolit
parent c204c9eb
...@@ -271,8 +271,7 @@ sub input_params { ...@@ -271,8 +271,7 @@ sub input_params {
our $_localconfig; our $_localconfig;
sub localconfig { sub localconfig {
$_localconfig ||= read_localconfig(); return $_[0]->process_cache->{localconfig} ||= read_localconfig();
return $_localconfig;
} }
sub params { sub params {
...@@ -643,6 +642,15 @@ sub request_cache { ...@@ -643,6 +642,15 @@ sub request_cache {
return $_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 # Private methods
# Per-process cleanup. Note that this is a plain subroutine, not a method, # Per-process cleanup. Note that this is a plain subroutine, not a method,
......
...@@ -41,10 +41,6 @@ use constant FORMAT_3_SIZE => [19,28,28]; ...@@ -41,10 +41,6 @@ use constant FORMAT_3_SIZE => [19,28,28];
use constant FORMAT_DOUBLE => '%19s %-55s'; use constant FORMAT_DOUBLE => '%19s %-55s';
use constant FORMAT_2_SIZE => [19,55]; 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. # Pseudo-constant.
sub SAFE_URL_REGEXP { sub SAFE_URL_REGEXP {
my $safe_protocols = join('|', SAFE_PROTOCOLS); my $safe_protocols = join('|', SAFE_PROTOCOLS);
...@@ -982,9 +978,12 @@ sub create { ...@@ -982,9 +978,12 @@ sub create {
'default_authorizer' => new Bugzilla::Auth(), '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} }); my $provider_key = join(':', @{ $config->{INCLUDE_PATH} });
$shared_providers{$provider_key} ||= Template::Provider->new($config); my $shared_providers = Bugzilla->process_cache->{shared_providers} ||= {};
$config->{LOAD_TEMPLATES} = [ $shared_providers{$provider_key} ]; $shared_providers->{$provider_key} ||= Template::Provider->new($config);
$config->{LOAD_TEMPLATES} = [ $shared_providers->{$provider_key} ];
local $Template::Config::CONTEXT = 'Bugzilla::Template::Context'; local $Template::Config::CONTEXT = 'Bugzilla::Template::Context';
...@@ -1051,7 +1050,7 @@ sub precompile_templates { ...@@ -1051,7 +1050,7 @@ sub precompile_templates {
} }
# Clear out the cached Provider object # 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 # Under mod_perl, we look for templates using the absolute path of the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment