Nick Kew wrote:
On Sat, 24 May 2008 15:04:01 +0200
Ruediger Pluem <[EMAIL PROTECTED]> wrote:

Sorry for pointing out this that late. I just thought about it again
and I guess we have a leak here. I think the following two lines are
missing here (before and after destroy_resource):

         reslist->ntotal--;

+            rv = destroy_resource(reslist, res);
         free_container(reslist, res);

Hmmm, good catch.

Maybe it would be better to call apr_reslist_invalidate
at this point, and keep the relevant cleanup in one place.


I don't think just calling apr_reslist_invalidate will work.

apr_reslist_invalidate assumes that the reslist is not locked; but it is locked here in apr_reslist_acquire when the expired resource gets destroyed.

FWIW - some testing with r659802 plus Ruediger's 2-line correction shows it works as expected with dbd (MySQL) connections. Expired connections are immediately destroyed down to smax - thereafter they are destroyed & replaced as required - but in all cases expired connections are never returned by apr_reslist_acquire. I don't see any evidence of further leaks.

-tom-

Reply via email to