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