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:
@@ -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({});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user