diff options
author | lpsolit%gmail.com <> | 2007-08-17 03:36:27 +0200 |
---|---|---|
committer | lpsolit%gmail.com <> | 2007-08-17 03:36:27 +0200 |
commit | a61497d246ff74cd33f370ec19d99abaceff7728 (patch) | |
tree | 165d234ef66cab09c66a5c94f85a5b2ba5f4b104 | |
parent | 69d686de7d7f2da1c8906a5465e39eb661aa56cf (diff) | |
download | bugzilla-a61497d246ff74cd33f370ec19d99abaceff7728.tar.gz bugzilla-a61497d246ff74cd33f370ec19d99abaceff7728.tar.xz |
Better fix for bug 391073: $^1 = 1 in all cases with mod_perl enabled, because everything is already evaluated, so we have to use caller() instead - Patch by me, r=justdave
-rw-r--r-- | Bugzilla/Error.pm | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm index d5b8a3479..18f9aae54 100644 --- a/Bugzilla/Error.pm +++ b/Bugzilla/Error.pm @@ -19,6 +19,7 @@ # # Contributor(s): Bradley Baetz <bbaetz@acm.org> # Marc Schumann <wurblzap@gmail.com> +# Frédéric Buclin <LpSolit@gmail.com> package Bugzilla::Error; @@ -32,6 +33,17 @@ use Bugzilla::WebService::Constants; use Bugzilla::Util; use Date::Format; +# We cannot use $^S to detect if we are in an eval(), because mod_perl +# already eval'uates everything, so $^S = 1 in all cases under mod_perl! +sub _in_eval { + my $in_eval = 0; + for (my $stack = 1; my $sub = (caller($stack))[3]; $stack++) { + last if $sub =~ /^ModPerl/; + $in_eval = 1 if $sub =~ /^\(eval\)/; + } + return $in_eval; +} + sub _throw_error { my ($name, $error, $vars) = @_; @@ -43,7 +55,7 @@ sub _throw_error { # and the transaction is rolled back (if supported) # If we are within an eval(), do not unlock tables as we are # eval'uating some test on purpose. - Bugzilla->dbh->bz_unlock_tables(UNLOCK_ABORT) unless $^S; + Bugzilla->dbh->bz_unlock_tables(UNLOCK_ABORT) unless _in_eval(); my $datadir = bz_locations()->{'datadir'}; # If a writable $datadir/errorlog exists, log error details there. |