From: Andy Grundman Date: Wed, 17 Oct 2007 15:46:11 +0000 (+0000) Subject: Revert Engine.pm change from yesterday X-Git-Tag: 5.7099_04~126 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=d04b2ffda419ac7f9c7ea1d3acab77e9fa9bc532 Revert Engine.pm change from yesterday --- diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 9b59c7d..089a959 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -4,10 +4,10 @@ use strict; use base 'Class::Accessor::Fast'; use CGI::Simple::Cookie; use Data::Dump qw/dump/; +use Errno 'EWOULDBLOCK'; use HTML::Entities; use HTTP::Body; use HTTP::Headers; -use IO::Select (); use URI::QueryParam; use Scalar::Util (); @@ -622,29 +622,30 @@ sub write { $self->{_prepared_write} = 1; } - my $wrote; - my $len = length($buffer); + my $len = length($buffer); + my $wrote = syswrite STDOUT, $buffer; - my $sel = IO::Select->new(); - $sel->add( \*STDOUT ); + if ( !defined $wrote && $! == EWOULDBLOCK ) { + # Unable to write on the first try, will retry in the loop below + $wrote = 0; + } - while ( $sel->can_write() ) { - $wrote ||= 0; - - my $ret = syswrite STDOUT, $buffer, $CHUNKSIZE, $wrote; - if ( defined $ret ) { - $wrote += $ret; - } - else { - # Write error - return; + if ( defined $wrote && $wrote < $len ) { + # We didn't write the whole buffer + while (1) { + my $ret = syswrite STDOUT, $buffer, $CHUNKSIZE, $wrote; + if ( defined $ret ) { + $wrote += $ret; + } + else { + next if $! == EWOULDBLOCK; + return; + } + + last if $wrote >= $len; } - - last if $wrote >= $len; } - $sel->remove( \*STDOUT ); - return $wrote; }