On 04/14/2018 02:32 AM, Yann Ylavic wrote: > On Sat, Apr 14, 2018 at 2:18 AM, Yann Ylavic <ylavic....@gmail.com> wrote: >> >> when the ttl is to be >> checked against the resource we should always peek it as LIFO (i.e. >> s/fifo/1/ in the first peek_resource() of reslist_acquire() in my >> patch). >> This would prevent starvation, and we should possibly do that in 1.6.x >> too (where apr_reslist_acquire_fifo() can't land). >> If we do that unconditionnaly, this patch is moot. After all, >> apr_reslist_maintain() and/hence apr_reslist_release() are already >> LIFO for recycling resources. > > IOW, this simple patch would work equally for me (and could go in any > version): > > Index: util-misc/apr_reslist.c > =================================================================== > --- util-misc/apr_reslist.c (revision 1829106) > +++ util-misc/apr_reslist.c (working copy) > @@ -61,13 +61,13 @@ struct apr_reslist_t { > }; > > /** > - * Grab a resource from the front of the resource list. > + * Grab a resource from the back of the resource list. > * Assumes: that the reslist is locked. > */ > static apr_res_t *pop_resource(apr_reslist_t *reslist) > { > apr_res_t *res; > - res = APR_RING_FIRST(&reslist->avail_list); > + res = APR_RING_LAST(&reslist->avail_list); > APR_RING_REMOVE(res, link); > reslist->nidle--; > return res; > --
Hm, but this would change this to become a fifo list instead of the current lifo list or do I miss something? Regards RĂ¼diger