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 <henrylcombri...@gmail.com
> 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 <go...@ectoplasm.org>
> wrote:
>
>>
>>
>> Sent from my iPhone
>>
>> On Jun 19, 2016, at 19:10, 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 $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
>>
>>
>

Reply via email to