Re: how to trap connection reset/abort in Apache::Filter?
[prev]
[thread]
[next]
[Date index for 2005/05/23]
Jeff? Could you please try that patch that I've sent earlier? I think it's
right, but I was still not very successful at reproducing your problem on
the HTTP level. Thanks.
Stas Bekman wrote:
> Stas Bekman wrote:
>
>> Jeff Ambrosino wrote:
>>
>>> Ok, this is going to be tough for me to test because I'm still on RC4,
>>> so it's not yet converted to the new Apache2 naming. I'll still try
>>> to make/test the svn snapshot, though (which also gives me a good
>>> reason to get more familiar with subversion.) I'll email what I find
>>> out.
>>>
>>> thanks Stas!
>>
>>
>>
>> OK, may be just try comparing to:
>>
>> $@ == APR::Const::ECONNABORTED or $@ == APR::Const::ECONNRESET
>>
>> The new subs just supposed to work on more platforms, where other
>> similar codes may be sent by the system.
>>
>> You can still play with the test
>> t/protocol/TestProtocol/echo_nonblock.pm from RC4.
>>
>> but looking again at your report, I can see that the issue is elsewhere.
>>
>> I believe it's coming from src/modules/perl/modperl_filter.c:
>>
>> if (filter->mode == MP_INPUT_FILTER_MODE) {
>> ...
>> }
>> else {
>> MP_RUN_CROAK(modperl_output_filter_flush(filter),
>> "Apache2::Filter");
>> }
>>
>> is that it? if you change the "Apache2::Filter" string (drop the 2 in
>> your case) to something else?
>
>
> If this is the case, please try this patch, I hope it applies to RC4
> (I've dropped '2' for you)
>
> Index: src/modules/perl/modperl_filter.c
> ===================================================================
> --- src/modules/perl/modperl_filter.c (revision 169708)
> +++ src/modules/perl/modperl_filter.c (working copy)
> @@ -535,11 +535,15 @@
> filter->bb_in = NULL;
> }
> MP_RUN_CROAK(modperl_input_filter_flush(filter),
> - "Apache::Filter");
> + "Apache::Filter internal flush");
> }
> else {
> - MP_RUN_CROAK(modperl_output_filter_flush(filter),
> - "Apache::Filter");
> + apr_status_t rc = modperl_output_filter_flush(filter);
> + if (!(rc == APR_SUCCESS ||
> + APR_STATUS_IS_ECONNRESET(rc) ||
> + APR_STATUS_IS_ECONNABORTED(rc))) {
> + modperl_croak(aTHX_ rc, "Apache::Filter internal flush");
> + }
> }
>
> MP_FILTER_RESTORE_ERRSV(errsv);
>
> I need to figure out how to write a test for this, so I can decide
> what's the right way to handle this.
>
--
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@xxxxxx.xxx http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
 |
(message missing)
|