[prev in list] [next in list] [prev in thread] [next in thread] 

List:       apache-modperl
Subject:    Re: Forcing order of perl output filters
From:       Torsten Foertsch <torsten.foertsch () gmx ! net>
Date:       2008-04-28 15:50:21
Message-ID: 200804281750.21819.torsten.foertsch () gmx ! net
[Download RAW message or body]

On Mon 28 Apr 2008, woinshet abdella wrote:
> $r->add_config([
> 'PerlOutputFilterHandler BI::Apache::FilterBeforeIncludes',
> 'PerlSetOutputFilter INCLUDES',
> 'PerlOutputFilterHandler BI::Apache::FilterAfterIncludes']);
>  
> I want the response to be processed by the filters in the order specified
> in the configruation as shown above. However for SOME reqeusts, the second
> handler, FilterAfterIncludes, is initiated before the first one finishes.
> The second handler to work properly it should start just after the first
> one because it expects some shared variable that is set by the first
> handler. It appears that this happens when the size of the response is big,
> is there any other way of forcing the order?

This is how filters work, no surprise. A filter is normally called multiple 
times per request. Each time it processes a chunk of the output as it goes 
down the output chain. When one filter has processed the chunk it is passed 
to the next filter until it is eventually sent out on the wire. Then the next 
chunk does the same. So you cannot expect one filter to see the complete 
output before another one is started.

You can of course do some tricks like catching the whole output in the first 
filter throwing the buckets away. Then at end of stream you can reinsert the 
stuff. But that is quite complex. If you decide to go this way remember not 
to cache the stuff in RAM but to write it to file(s). Otherwise your 
processes will waste a lot of memory.

Torsten

--
Need professional mod_perl support?
Just hire me: torsten.foertsch@gmx.net

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic