stas 2004/07/24 00:27:03
Modified: lib/Apache compat.pm
t/conf modperl_extra.pl
Log:
improve the POST reading code (now handles file buckets correctly)
Revision Changes Path
1.114 +11 -12 modperl-2.0/lib/Apache/compat.pm
Index: compat.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/lib/Apache/compat.pm,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -u -r1.113 -r1.114
--- compat.pm 16 Jul 2004 01:10:45 -0000 1.113
+++ compat.pm 24 Jul 2004 07:27:03 -0000 1.114
@@ -43,6 +43,7 @@
use Apache::RequestUtil ();
use Apache::Response ();
use Apache::SubRequest ();
+use Apache::Filter ();
use Apache::Util ();
use Apache::Log ();
use Apache::URI ();
@@ -473,28 +474,26 @@
sub content {
my $r = shift;
- my $ba = $r->connection->bucket_alloc;
- my $bb = APR::Brigade->new($r->pool, $ba);
+ my $bb = APR::Brigade->new($r->pool,
+ $r->connection->bucket_alloc);
my $data = '';
my $seen_eos = 0;
- my $count = 0;
do {
- $r->input_filters->get_brigade($bb,
- Apache::MODE_READBYTES, APR::BLOCK_READ, IOBUFSIZE);
-
- while (!$bb->is_empty) {
- my $b = $bb->first;
-
- $b->remove;
+ $r->input_filters->get_brigade($bb, Apache::MODE_READBYTES,
+ APR::BLOCK_READ, IOBUFSIZE);
+ for (my $b = $bb->first; $b; $b = $bb->next($b)) {
if ($b->is_eos) {
$seen_eos++;
last;
}
- $b->read(my $buf);
- $data .= $buf;
+ if ($b->read(my $buf)) {
+ $data .= $buf;
+ }
+
+ $b->remove; # optimization to reuse memory
}
} while (!$seen_eos);
1.59 +12 -15 modperl-2.0/t/conf/modperl_extra.pl
Index: modperl_extra.pl
===================================================================
RCS file: /home/cvs/modperl-2.0/t/conf/modperl_extra.pl,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -u -r1.58 -r1.59
--- modperl_extra.pl 16 Jul 2004 01:10:46 -0000 1.58
+++ modperl_extra.pl 24 Jul 2004 07:27:03 -0000 1.59
@@ -150,6 +150,7 @@
use APR::Brigade ();
use APR::Bucket ();
+use Apache::Filter ();
use Apache::Const -compile => qw(MODE_READBYTES);
use APR::Const -compile => qw(SUCCESS BLOCK_READ);
@@ -162,37 +163,33 @@
my $r = shift;
my $debug = shift || 0;
- my $ba = $r->connection->bucket_alloc;
- my $bb = APR::Brigade->new($r->pool, $ba);
+ my $bb = APR::Brigade->new($r->pool,
+ $r->connection->bucket_alloc);
my $data = '';
my $seen_eos = 0;
my $count = 0;
do {
- my $rv = $r->input_filters->get_brigade($bb,
- Apache::MODE_READBYTES, APR::BLOCK_READ, IOBUFSIZE);
- if ($rv != APR::SUCCESS) {
- return $rv;
- }
+ $r->input_filters->get_brigade($bb, Apache::MODE_READBYTES,
+ APR::BLOCK_READ, IOBUFSIZE);
$count++;
warn "read_post: bb $count\n" if $debug;
- while (!$bb->is_empty) {
- my $b = $bb->first;
-
- $b->remove;
-
+ for (my $b = $bb->first; $b; $b = $bb->next($b)) {
if ($b->is_eos) {
warn "read_post: EOS bucket:\n" if $debug;
$seen_eos++;
last;
}
- $b->read(my $buf);
- warn "read_post: DATA bucket: [$buf]\n" if $debug;
- $data .= $buf;
+ if ($b->read(my $buf)) {
+ warn "read_post: DATA bucket: [$buf]\n" if $debug;
+ $data .= $buf;
+ }
+
+ $b->remove; # optimization to reuse memory
}
} while (!$seen_eos);