From: mkanat%bugzilla.org <> Date: Wed, 16 Sep 2009 00:16:20 +0000 (+0000) Subject: Bug 510958: Allow hooks to exit() under mod_perl X-Git-Tag: bugzilla-3.5.1~70 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=540d08b4b84c5d4bb4df362d9bed12da3ac02d24;p=thirdparty%2Fbugzilla.git Bug 510958: Allow hooks to exit() under mod_perl Patch by Max Kanat-Alexander r=dkl, a=mkanat --- diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm index 990c6f1170..2eda8d856d 100644 --- a/Bugzilla/Hook.pm +++ b/Bugzilla/Hook.pm @@ -21,12 +21,25 @@ # package Bugzilla::Hook; +use strict; use Bugzilla::Constants; use Bugzilla::Util; use Bugzilla::Error; -use strict; +use Scalar::Util qw(blessed); + +BEGIN { + if ($ENV{MOD_PERL}) { + require ModPerl::Const; + import ModPerl::Const -compile => 'EXIT'; + } + else { + # Create a fake constant. We have to do this in a string eval, + # otherwise this will always be defined. + eval('sub ModPerl::EXIT;'); + } +} sub process { my ($name, $args) = @_; @@ -49,8 +62,16 @@ sub process { # Allow extensions to load their own libraries. local @INC = ("$extension/lib", @INC); do($extension.'/code/'.$name.'.pl'); - ThrowCodeError('extension_invalid', - { errstr => $@, name => $name, extension => $extension }) if $@; + if ($@) { + if ($ENV{MOD_PERL} and blessed $@ and $@ == ModPerl::EXIT) { + exit; + } + else { + ThrowCodeError('extension_invalid', + { errstr => $@, name => $name, + extension => $extension }); + } + } # Flush stored data. Bugzilla->hook_args({}); }