X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine.pm;h=18addd4064ddd6dcea52ac2b6f68c439732d286d;hb=e16a6c4e6c4d49e73b5286b3186616af14f3f554;hp=9b59c7dfbc00f17ff7aabfad0ee4808427ee0cc4;hpb=e2b0ddd34989844e13aa57483888973068d62dbe;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 9b59c7d..18addd4 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 (); @@ -157,6 +157,9 @@ EOF (no) Vennligst prov igjen senere (dk) Venligst prov igen senere (pl) Prosze sprobowac pozniej +(pt) Por favor volte mais tarde +(ru) Попробуйте еще раз позже +(ua) Спробуйте ще раз пізніше $name = ''; @@ -314,7 +317,7 @@ sub prepare_body { unless ( $c->request->{_body} ) { my $type = $c->request->header('Content-Type'); $c->request->{_body} = HTTP::Body->new( $type, $length ); - $c->request->{_body}->{tmpdir} = $c->config->{uploadtmp} + $c->request->{_body}->tmpdir( $c->config->{uploadtmp} ) if exists $c->config->{uploadtmp}; } @@ -452,13 +455,13 @@ sub prepare_query_parameters { # replace semi-colons $query_string =~ s/;/&/g; - my @params = split /&/, $query_string; + my @params = grep { length $_ } split /&/, $query_string; for my $item ( @params ) { my ($param, $value) = map { $self->unescape_uri($_) } - split( /=/, $item ); + split( /=/, $item, 2 ); $param = $self->unescape_uri($item) unless defined $param; @@ -622,29 +625,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; } @@ -669,9 +673,7 @@ sub unescape_uri { =head1 AUTHORS -Sebastian Riedel, - -Andy Grundman, +Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT