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

Reply via email to