Re: Can't locate object method "pool" via package "Apache2::Filter"... line xx

Henry Combrinck <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <CAOMR_Ld4zusbe9vEYyY_B1uRV6D9ggqVnLTyNJsjtBdu7QbFLg@mail.gmail.com>
Another thing worth mentioning is that the process SEGVs after the above
error message:

...exit signal Segmentation fault (11)

On Mon, Jun 20, 2016 at 11:16 AM, Henry Combrinck <[email protected]
> wrote:

> Thanks Philippe,
>
> It's now no longer failing, however the input filter is not returning any
> data and I get the following error in error_log:
>
> -e: Deep recursion on subroutine "ZCRM::OFilter::input" at
> /opt/code/CRM/OFilter.pm line 42.
>
> Here's the subroutine:
>
> sub input {
>     my $f = shift;
>     my $r = $f->r;
>
>     my $bb = APR::Brigade->new( $r->pool, $r->connection->bucket_alloc );
>
>     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;
> }
>
>
> On Mon, Jun 20, 2016 at 1:49 AM, Philippe Chiasson <[email protected]>
> wrote:
>
>>
>>
>> Sent from my iPhone
>>
>> On Jun 19, 2016, at 19:10, Henry Combrinck <[email protected]>
>> 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 $f = shift;
>> my $r = $f->r;
>>
>> Just like in the output filter example above.
>>
>>
>>     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
>>
>>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.