diff options
author | Dylan Hardison <dylan@mozilla.com> | 2016-04-13 16:46:30 +0200 |
---|---|---|
committer | Dylan Hardison <dylan@mozilla.com> | 2016-04-13 16:46:30 +0200 |
commit | 33f61556746e1729746342d802ca7ea9cea18caf (patch) | |
tree | 95e4cb3791be0cd9e09187cbbfbdd3cdc9feb5ff | |
parent | cc0c32bcb0e9f1b6c0b0157f8480d69047740f1e (diff) | |
download | bugzilla-33f61556746e1729746342d802ca7ea9cea18caf.tar.gz bugzilla-33f61556746e1729746342d802ca7ea9cea18caf.tar.xz |
Bug 1195736 - intermittent internal error: "file error - nav_link: not found" (also manifests as fields_lhs: not found)
-rw-r--r-- | Bugzilla.pm | 3 | ||||
-rw-r--r-- | Bugzilla/Error.pm | 9 | ||||
-rw-r--r-- | Bugzilla/Template.pm | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/Bugzilla.pm b/Bugzilla.pm index 021783a75..cba448112 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -518,6 +518,9 @@ sub error_mode { if (defined $newval) { $class->request_cache->{error_mode} = $newval; } + if ($class->template->in_process) { + return ERROR_MODE_DIE; + } return $class->request_cache->{error_mode} || (i_am_cgi() ? ERROR_MODE_WEBPAGE : ERROR_MODE_DIE); } diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm index fa898fba4..927745201 100644 --- a/Bugzilla/Error.pm +++ b/Bugzilla/Error.pm @@ -99,8 +99,13 @@ sub _throw_error { # and calling $template->process over and over for those errors # is too slow. So instead, we just "die" with a dump of the arguments. if (Bugzilla->error_mode != ERROR_MODE_TEST) { - $template->process($name, $vars, \$message) - || ThrowTemplateError($template->error()); + if (Bugzilla->template->in_process) { + $message = "error inside Bugzilla->template->process: $error"; + } + else { + $template->process($name, $vars, \$message) + || ThrowTemplateError($template->error()); + } } # Let's call the hook first, so that extensions can override diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index 56ebd9c21..5b3b045ab 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -665,12 +665,15 @@ $Template::Stash::SCALAR_OPS->{ truncate } = ############################################################################### +our $_in_process = 0; +sub in_process { return $_in_process } sub process { my $self = shift; # All of this current_langs stuff allows template_inner to correctly # determine what-language Template object it should instantiate. my $current_langs = Bugzilla->request_cache->{template_current_lang} ||= []; unshift(@$current_langs, $self->context->{bz_language}); + local $_in_process = 1; my $retval = $self->SUPER::process(@_); shift @$current_langs; return $retval; |