From 3b3347c4a86ae02050ee809a74f5385fc750a0a3 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Tue, 30 Mar 2010 15:11:26 -0700 Subject: [PATCH] Restore ErrorHandler->fatal handling of no DB connection. Fixes bug #11494. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Session/ErrorHandler.pm | 1 + lib/WebGUI/URL/Content.pm | 71 ++++++++++++++++-------------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index c74ace65d..ff077f3e7 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -6,6 +6,7 @@ - fixed #11497: default profile settings - fixed #11492: photo details - fixed #11503: Gallery: Wrong owner after uploading of ZIP archives + - fixed #11494: Error message on mysql down 7.9.1 - fixed #11464: blank page after setting posts per page in Collaboration System to 0 (zero) diff --git a/lib/WebGUI/Session/ErrorHandler.pm b/lib/WebGUI/Session/ErrorHandler.pm index 917fb6ebe..90a35467c 100644 --- a/lib/WebGUI/Session/ErrorHandler.pm +++ b/lib/WebGUI/Session/ErrorHandler.pm @@ -232,6 +232,7 @@ sub fatal { if (! defined $self->session->db(1)) { # We can't even _determine_ whether we can show the debug text. Punt. $self->session->output->print("

Fatal Internal Error

"); + $self->session->output->print("

".$message."

"); } elsif ($self->canShowDebug()) { $self->session->output->print("

WebGUI Fatal Error

Something unexpected happened that caused this system to fault.

\n",1); diff --git a/lib/WebGUI/URL/Content.pm b/lib/WebGUI/URL/Content.pm index 14a2d8fd4..f94dc1257 100644 --- a/lib/WebGUI/URL/Content.pm +++ b/lib/WebGUI/URL/Content.pm @@ -64,47 +64,50 @@ sub handler { my ($request, $server, $config) = @_; $request->push_handlers(PerlResponseHandler => sub { my $session = $request->pnotes('wgSession'); - unless (defined $session) { - $session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request, $server); - } - WEBGUI_FATAL: foreach my $handler (@{$config->get("contentHandlers")}) { - my $output = eval { WebGUI::Pluggable::run($handler, "handler", [ $session ] )}; - if ( my $e = WebGUI::Error->caught ) { - $session->errorHandler->error($e->package.":".$e->line." - ".$e->error); - $session->errorHandler->debug($e->package.":".$e->line." - ".$e->trace); + WEBGUI_FATAL: { + unless (defined $session) { + $session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request, $server); + return Apache2::Const::OK if ! defined $session; } - elsif ( $@ ) { - $session->errorHandler->error( $@ ); - } - else { - if ($output eq "chunked") { - if ($session->errorHandler->canShowDebug()) { - $session->output->print($session->errorHandler->showDebug(),1); - } - last; + foreach my $handler (@{$config->get("contentHandlers")}) { + my $output = eval { WebGUI::Pluggable::run($handler, "handler", [ $session ] )}; + if ( my $e = WebGUI::Error->caught ) { + $session->errorHandler->error($e->package.":".$e->line." - ".$e->error); + $session->errorHandler->debug($e->package.":".$e->line." - ".$e->trace); } - if ($output eq "empty") { - if ($session->errorHandler->canShowDebug()) { - $session->output->print($session->errorHandler->showDebug(),1); - } - last; + elsif ( $@ ) { + $session->errorHandler->error( $@ ); } - elsif (defined $output && $output ne "") { - $session->http->sendHeader; - $session->output->print($output); - if ($session->errorHandler->canShowDebug()) { - $session->output->print($session->errorHandler->showDebug(),1); + else { + if ($output eq "chunked") { + if ($session->errorHandler->canShowDebug()) { + $session->output->print($session->errorHandler->showDebug(),1); + } + last; + } + if ($output eq "empty") { + if ($session->errorHandler->canShowDebug()) { + $session->output->print($session->errorHandler->showDebug(),1); + } + last; + } + elsif (defined $output && $output ne "") { + $session->http->sendHeader; + $session->output->print($output); + if ($session->errorHandler->canShowDebug()) { + $session->output->print($session->errorHandler->showDebug(),1); + } + last; + } + # Keep processing for success codes + elsif ($session->http->getStatus < 200 || $session->http->getStatus > 299) { + $session->http->sendHeader; + last; } - last; - } - # Keep processing for success codes - elsif ($session->http->getStatus < 200 || $session->http->getStatus > 299) { - $session->http->sendHeader; - last; } } } - $session->close; + $session->close if defined $session; return Apache2::Const::OK; }); $request->push_handlers(PerlMapToStorageHandler => sub { return Apache2::Const::OK });