From 605d260ef94099d9f16043ac274972aab2502e37 Mon Sep 17 00:00:00 2001 From: vfilippov Date: Tue, 29 Dec 2009 12:55:10 +0000 Subject: [PATCH] Bug 58633 Append stack trace for all errors, not only eval errors git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@613 6955db30-a419-402b-8a0d-67ecbb4d7f56 --- Bugzilla.pm | 5 ----- Bugzilla/Error.pm | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Bugzilla.pm b/Bugzilla.pm index 95089283d..8482cd54a 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -71,11 +71,6 @@ BEGIN if ($msg !~ /^(Программа вызвала сброс соединения|Software caused connection abort) at /iso) { $msg = { eval_error => $msg }; - if (eval { require Devel::StackTrace; }) - { - # Append stack trace if Devel::StackTrace is available - $msg->{stack_trace} = Devel::StackTrace->new->as_string; - } Bugzilla::Error::ThrowCodeError('eval_error', $msg); } } diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm index 8e70e3571..87332883c 100644 --- a/Bugzilla/Error.pm +++ b/Bugzilla/Error.pm @@ -38,6 +38,8 @@ use Data::Dumper; use overload '""' => sub { $_[0]->{message} }; +my $HAVE_DEVEL_STACKTRACE = eval { require Devel::StackTrace }; + # 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 { @@ -77,6 +79,11 @@ sub _throw_error $vars ||= {}; $vars->{error} = $error; + if (!$vars->{stack_trace} && $HAVE_DEVEL_STACKTRACE) + { + # Append stack trace if Devel::StackTrace is available + $vars->{stack_trace} = Devel::StackTrace->new->as_string; + } my $mode = Bugzilla->error_mode; # Make sure any transaction is rolled back (if supported).