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
>
>

Reply via email to