A further comment: the docs at https://perl.apache.org/docs/2.0/api/Apache2/RequestRec.html#C_pool_ indicate $r->pool should work, but for some reason is not being found.
On Mon, Jun 20, 2016 at 1:10 AM, Henry Combrinck <henrylcombri...@gmail.com> wrote: > Greetings, > > I'm relatively new to mod_perl, so please forgive the ignorance. > > I've managed to create an output filter, but I'm having a problem with an > input filter. The error I get is as per the subject line. > > Here's the code: > > apache config > > Perlrequire /opt/code/scripts/apache2-perl-startup.pl > ... > PerlOutputFilterHandler ZCRM::OFilter::output > PerlInputFilterHandler ZCRM::OFilter::input > > And here's the perl code (output filter works fine, but the input filter > results in the error below) > > package ZCRM::OFilter; > > use strict; > use warnings; > > use Apache2::Filter (); > use Apache2::RequestRec (); > use Apache2::Const -compile => qw(OK DECLINED MODE_READBYTES); > use APR::Const -compile => qw(SUCCESS BLOCK_READ); > use Apache2::Connection (); > > use constant IOBUFSIZE => 8192; > > use strict; > > sub output { > my $f = shift; > my $r = $f->r; > > while ( $f->read( my $buffer, 1024 ) ) { > # do work on $buffer... > $f->print($buffer); > } > > return Apache2::Const::OK; > } > > sub input { > my $r = shift; > > my $bb = APR::Brigade->new( $r->pool, $r->connection->bucket_alloc); # > <--- Line XX - ERROR here > > my $data = ''; > my $seen_eos = 0; > do { > $r->input_filters->get_brigade( $bb, Apache2::Const::MODE_READBYTES, > APR::Const::BLOCK_READ, IOBUFSIZE ); > > for ( my $b = $bb->first ; $b ; $b = $bb->next($b)) { > if ( $b->is_eos ) { > $seen_eos++; > last; > } > > if ( $b->read( my $buf ) ) { > $data .= $buf; > } > > $b->remove; # optimization to reuse memory > } > } while ( !$seen_eos ); > > $bb->destroy; > > return $data; > } > > 1; > > I would appreciate any pointers. > > Thanks > Henk > >