You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2003/12/10 19:20:22 UTC
cvs commit: apr-util/misc apr_reslist.c
trawick 2003/12/10 10:20:22
Modified: . CHANGES
include apr_reslist.h
misc apr_reslist.c
Log:
Add timeout feature to apr_reslist_acquire().
Submitted by: Mladen Turk <mturk apache.org>
Reviewed by: Jeff Trawick
Revision Changes Path
1.122 +3 -0 apr-util/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apr-util/CHANGES,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -r1.121 -r1.122
--- CHANGES 6 Dec 2003 01:29:43 -0000 1.121
+++ CHANGES 10 Dec 2003 18:20:21 -0000 1.122
@@ -1,5 +1,8 @@
Changes with APR-util 1.0
+ *) Add timeout feature to apr_reslist_acquire().
+ [Mladen Turk <mturk apache.org>]
+
*) Fixed a bug in apr_rmm that would cause it to mishandle blocks of
a size close to the one requested from the allocator.
[Kevin Wang <xwang_tech yahoo.com>]
1.6 +9 -0 apr-util/include/apr_reslist.h
Index: apr_reslist.h
===================================================================
RCS file: /home/cvs/apr-util/include/apr_reslist.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- apr_reslist.h 1 Jan 2003 00:02:20 -0000 1.5
+++ apr_reslist.h 10 Dec 2003 18:20:21 -0000 1.6
@@ -150,6 +150,15 @@
APU_DECLARE(apr_status_t) apr_reslist_release(apr_reslist_t *reslist,
void *resource);
+/**
+ * Set the timeout the acquire will wait for a free resource
+ * when the maximum number of resources is exceeded.
+ * @param reslist The resource list.
+ * @param timeout Timeout to wait. The zero waits forewer.
+ */
+APU_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist,
+ apr_interval_time_t timeout);
+
#ifdef __cplusplus
}
#endif
1.7 +16 -1 apr-util/misc/apr_reslist.c
Index: apr_reslist.c
===================================================================
RCS file: /home/cvs/apr-util/misc/apr_reslist.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- apr_reslist.c 6 Oct 2003 20:34:30 -0000 1.6
+++ apr_reslist.c 10 Dec 2003 18:20:22 -0000 1.7
@@ -88,6 +88,7 @@
int smax; /* soft maximum on the total number of resources */
int hmax; /* hard maximum on the total number of resources */
apr_interval_time_t ttl; /* TTL when we have too many resources */
+ apr_interval_time_t timeout; /* Timeout for waiting on resource */
apr_reslist_constructor constructor;
apr_reslist_destructor destructor;
void *params; /* opaque data passed to constructor and destructor calls */
@@ -343,7 +344,15 @@
* a new one, or something becomes free. */
else while (reslist->ntotal >= reslist->hmax
&& reslist->nidle <= 0) {
- apr_thread_cond_wait(reslist->avail, reslist->listlock);
+ if (reslist->timeout) {
+ if ((rv = apr_thread_cond_timedwait(reslist->avail,
+ reslist->listlock, reslist->timeout)) != APR_SUCCESS) {
+ apr_thread_mutex_unlock(reslist->listlock);
+ return rv;
+ }
+ }
+ else
+ apr_thread_cond_wait(reslist->avail, reslist->listlock);
}
/* If we popped out of the loop, first try to see if there
* are new resources available for immediate use. */
@@ -382,6 +391,12 @@
apr_thread_mutex_unlock(reslist->listlock);
return reslist_maint(reslist);
+}
+
+APU_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist,
+ apr_interval_time_t timeout)
+{
+ reslist->timeout = timeout;
}
#endif /* APR_HAS_THREADS */