Added temporary workaround for debug memory leak in Text::ASCIITable
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine.pm
index 3879058..36b839b 100644 (file)
@@ -16,9 +16,6 @@ use Catalyst::Request::Upload;
 use Catalyst::Response;
 use Catalyst::Utils;
 
-# For pretty dumps
-$Data::Dumper::Terse = 1;
-
 __PACKAGE__->mk_classdata('components');
 __PACKAGE__->mk_accessors(qw/counter depth request response state/);
 
@@ -286,7 +283,12 @@ sub finalize_error {
 
     my ( $title, $error, $infos );
     if ( $c->debug ) {
-        $error = join '<br/>', @{ $c->error };
+
+        # For pretty dumps
+        local $Data::Dumper::Terse = 1;
+        $error = join '',
+          map { '<code class="error">' . encode_entities($_) . '</code>' }
+          @{ $c->error };
         $error ||= 'No output';
         $title = $name = "$name on Catalyst $Catalyst::VERSION";
         my $req   = encode_entities Dumper $c->req;
@@ -362,6 +364,12 @@ sub finalize_error {
             margin: 4px;
             -moz-border-radius: 10px;
         }
+        code.error {
+            display: block;
+            margin: 1em 0;
+            overflow: auto;
+            white-space: pre;
+        }
     </style>
 </head>
 <body>
@@ -411,12 +419,14 @@ sub handler {
             my $av = sprintf '%.3f',
               ( $elapsed == 0 ? '??' : ( 1 / $elapsed ) );
             my $t = Text::ASCIITable->new;
+            undef $t->{tiedarr};    # work-around for a memory leak
             $t->setCols( 'Action', 'Time' );
             $t->setColWidth( 'Action', 64, 1 );
             $t->setColWidth( 'Time',   9,  1 );
 
             for my $stat (@stats) { $t->addRow( $stat->[0], $stat->[1] ) }
-            $class->log->info( "Request took ${elapsed}s ($av/s)\n" . $t->draw );
+            $class->log->info(
+                "Request took ${elapsed}s ($av/s)\n" . $t->draw );
         }
         else { $status = &$handler }
 
@@ -510,6 +520,7 @@ sub prepare {
 
     if ( $c->debug && keys %{ $c->req->params } ) {
         my $t = Text::ASCIITable->new;
+        undef $t->{tiedarr};    # work-around for a memory leak
         $t->setCols( 'Key', 'Value' );
         $t->setColWidth( 'Key',   37, 1 );
         $t->setColWidth( 'Value', 36, 1 );