Would this help the mod_proxy CLOSE_WAIT issue in BZ?

---------- Forwarded message ----------
From:  <yla...@apache.org>
Date: Tue, Apr 3, 2018 at 6:00 PM
Subject: svn commit: r1828289 - in /apr/apr/trunk: CHANGES
include/apr_reslist.h util-misc/apr_reslist.c
To: comm...@apr.apache.org


Author: ylavic
Date: Tue Apr  3 22:00:10 2018
New Revision: 1828289

URL: http://svn.apache.org/viewvc?rev=1828289&view=rev
Log:
reslist: Add apr_reslist_fifo_set().

This allows to reuse resources in FIFO mode instead of the default LIFO mode.


Modified:
    apr/apr/trunk/CHANGES
    apr/apr/trunk/include/apr_reslist.h
    apr/apr/trunk/util-misc/apr_reslist.c

Modified: apr/apr/trunk/CHANGES
URL: 
http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1828289&r1=1828288&r2=1828289&view=diff
==============================================================================
--- apr/apr/trunk/CHANGES [utf-8] (original)
+++ apr/apr/trunk/CHANGES [utf-8] Tue Apr  3 22:00:10 2018
@@ -1,6 +1,9 @@
                                                      -*- coding: utf-8 -*-
 Changes for APR 2.0.0

+  *) reslist: Add apr_reslist_fifo_set() to allow for reusing resources
+     in FIFO mode instead of the default LIFO mode.  [Yann Ylavic]
+
   *) Add apr_pool_tag_get to retrieve the pool tag name.  [Joe Orton]

   *) Add apr_sockaddr_zone_set, apr_sockaddr_zone_set to set and retrieve

Modified: apr/apr/trunk/include/apr_reslist.h
URL: 
http://svn.apache.org/viewvc/apr/apr/trunk/include/apr_reslist.h?rev=1828289&r1=1828288&r2=1828289&view=diff
==============================================================================
--- apr/apr/trunk/include/apr_reslist.h (original)
+++ apr/apr/trunk/include/apr_reslist.h Tue Apr  3 22:00:10 2018
@@ -134,6 +134,13 @@ APR_DECLARE(apr_status_t) apr_reslist_re
  */
 APR_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist,
                                           apr_interval_time_t timeout);
+/**
+ * Set whether the reslist reuses resources as FIFO (First In First Out) or
+ * LIFO (Last In First Out).
+ * @param reslist The resource list.
+ * @param fifo Set as FIFO (non zero) or LIFO (zero).
+ */
+APR_DECLARE(void) apr_reslist_fifo_set(apr_reslist_t *reslist, int to);

 /**
  * Return the number of outstanding resources.

Modified: apr/apr/trunk/util-misc/apr_reslist.c
URL: 
http://svn.apache.org/viewvc/apr/apr/trunk/util-misc/apr_reslist.c?rev=1828289&r1=1828288&r2=1828289&view=diff
==============================================================================
--- apr/apr/trunk/util-misc/apr_reslist.c (original)
+++ apr/apr/trunk/util-misc/apr_reslist.c Tue Apr  3 22:00:10 2018
@@ -58,6 +58,7 @@ struct apr_reslist_t {
     apr_thread_mutex_t *listlock;
     apr_thread_cond_t *avail;
 #endif
+    int fifo;
 };

 /**
@@ -80,7 +81,12 @@ static apr_res_t *pop_resource(apr_resli
  */
 static void push_resource(apr_reslist_t *reslist, apr_res_t *resource)
 {
-    APR_RING_INSERT_HEAD(&reslist->avail_list, resource, apr_res_t, link);
+    if (reslist->fifo) {
+        APR_RING_INSERT_TAIL(&reslist->avail_list, resource, apr_res_t, link);
+    }
+    else {
+        APR_RING_INSERT_HEAD(&reslist->avail_list, resource, apr_res_t, link);
+    }
     resource->freed = apr_time_now();
     reslist->nidle++;
 }
@@ -434,6 +440,11 @@ APR_DECLARE(void) apr_reslist_timeout_se
     reslist->timeout = timeout;
 }

+APR_DECLARE(void) apr_reslist_fifo_set(apr_reslist_t *reslist, int to)
+{
+    reslist->fifo = to;
+}
+
 APR_DECLARE(apr_uint32_t) apr_reslist_acquired_count(apr_reslist_t *reslist)
 {
     apr_uint32_t count;




-- 
Eric Covener
cove...@gmail.com

Reply via email to