On 11/04/2010 01:34 AM, Rainer Jung wrote:
> On 04.11.2010 00:57, Graham Leggett wrote:
>> On 03 Nov 2010, at 10:28 PM, Stefan Fritsch wrote:
>>
>>> Strange, I have these problems only with prefork, not with event.
>>> But with event I get a segfault in the reslist cleanup code.
>>>
>>> Can somebody cross-check this?
>>
>> This smelled like a pool lifetime issue, and looking closer it looked
>> like we were cleaning up a brigade after we had returned the backend to
>> the pool. The attached patch stops the crash, and it seems to run at a
>> sensible speed again (I suspect the late cleanup of the brigade was
>> sending the code into a spin). Can you give it a try?

>From just looking at the code this seems to be the correct thing to do.

>>
>> One proxy test still fails though:
>>
>> t/modules/proxy.............ok 7/15# Failed test 10 in t/modules/proxy.t
>> at line 34
>> t/modules/proxy.............FAILED test 10
>> Failed 1/15 tests, 93.33% okay
>>
>> This fails because the first bucket of the response has been corrupted:
>>
>> graham-leggetts-macbook-pro-3:httpd-test minfrin$ curl
>> http://localhost:8536/reverse/modules/cgi/nph-102.pl
>> sl/2.3.9-dev OpenS
>>
>> I've seen this a few weeks ago and it went away, so I suspect this isn't
>> proxy that's doing it. Need to dig further.
> 
> Your patch fixes the crashes for me. All tests pass if the following
> patch is also applied. Otherwise worker hangs.
> 
> I don't know, whether that is the right thing to add, especially since
> "cleared" now has a use very similar to "inreslist". The patch is an
> addon to r1026665 where the "cleaned" flag was introduced, occassionally
> set to "1" and tested against "0", but never reset.
> 
> 
> Index: modules/proxy/proxy_util.c
> ===================================================================
> --- modules/proxy/proxy_util.c  (revision 1030775)
> +++ modules/proxy/proxy_util.c  (working copy)
> @@ -2096,6 +2096,7 @@
>  #if APR_HAS_THREADS
>      (*conn)->inreslist = 0;
>  #endif
> +    (*conn)->cleaned = 0;
> 
>      return OK;
>  }

Yeah, this is correct. As I reviewed the patch initially I thought the reset
would happen through an regular apr_pcalloc  for conn, but this is not the case.
So the reset is the correct thing to do here.

Regards

RĂ¼diger

Reply via email to