Revert SIGCHLD patch pending a test
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / HTTP.pm
index f4fef51..ec4ad86 100644 (file)
@@ -142,30 +142,29 @@ sub read_chunk {
 
 =head2 $self->write($c, $buffer)
 
-Writes the buffer to the client. Can only be called once for a request.
+Writes the buffer to the client.
 
 =cut
 
 sub write {
     my ( $self, $c, $buffer ) = @_;
     
-       # Avoid 'print() on closed filehandle Remote' warnings when using IE
-       return unless *STDOUT->opened();
-       
-       my $ret;
-       
-       # Prepend the headers if they have not yet been sent
-       if ( my $headers = delete $self->{_header_buf} ) {
-           DEBUG && warn "write: Wrote headers and first chunk (" . length($headers . $buffer) . " bytes)\n";
-           $ret = $self->NEXT::write( $c, $headers . $buffer );
-    }
-    else {
-        DEBUG && warn "write: Wrote chunk (" . length($buffer) . " bytes)\n";
-        $ret = $self->NEXT::write( $c, $buffer );
+    # Avoid 'print() on closed filehandle Remote' warnings when using IE
+    return unless *STDOUT->opened();
+
+    # Prepend the headers if they have not yet been sent
+    if ( my $headers = delete $self->{_header_buf} ) {
+        $buffer = $headers . $buffer;
     }
     
-    if ( !$ret ) {
+    my $ret = $self->NEXT::write( $c, $buffer );
+    
+    if ( !defined $ret ) {
         $self->{_write_error} = $!;
+        DEBUG && warn "write: Failed to write response ($!)\n";
+    }
+    else {
+        DEBUG && warn "write: Wrote response ($ret bytes)\n";
     }
     
     return $ret;
@@ -186,7 +185,7 @@ sub run {
     if ($options->{background}) {
         my $child = fork;
         die "Can't fork: $!" unless defined($child);
-        exit if $child;
+        return $child if $child;
     }
 
     my $restart = 0;
@@ -286,7 +285,6 @@ sub run {
                 $self->_handler( $class, $port, $method, $uri, $protocol );
             
                 if ( my $error = delete $self->{_write_error} ) {
-                    DEBUG && warn "Write error: $error\n";
                     close Remote;
                     
                     if ( !defined $pid ) {