Bug 510958: Allow hooks to exit() under mod_perl

Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=dkl, a=mkanat


git-svn-id: svn://10.0.0.236/trunk@258397 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mkanat%bugzilla.org
2009-09-16 00:16:20 +00:00
parent 5ae9fbe7b1
commit 9e8fbe7f9b

View File

@@ -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({});
}