• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/apr-util/misc/

Lines Matching refs:reslist

65  * Assumes: that the reslist is locked.
67 static apr_res_t *pop_resource(apr_reslist_t *reslist)
70 res = APR_RING_FIRST(&reslist->avail_list);
72 reslist->nidle--;
79 * Assumes: that the reslist is locked.
81 static void push_resource(apr_reslist_t *reslist, apr_res_t *resource)
83 APR_RING_INSERT_HEAD(&reslist->avail_list, resource, apr_res_t, link);
85 reslist->nidle++;
91 static apr_res_t *get_container(apr_reslist_t *reslist)
95 if (!APR_RING_EMPTY(&reslist->free_list, apr_res_t, link)) {
96 res = APR_RING_FIRST(&reslist->free_list);
100 res = apr_pcalloc(reslist->pool, sizeof(*res));
107 static void free_container(apr_reslist_t *reslist, apr_res_t *container)
109 APR_RING_INSERT_TAIL(&reslist->free_list, container, apr_res_t, link);
114 * Assumes: that the reslist is locked.
116 static apr_status_t create_resource(apr_reslist_t *reslist, apr_res_t **ret_res)
121 res = get_container(reslist);
123 rv = reslist->constructor(&res->opaque, reslist->params, reslist->pool);
131 * Assumes: that the reslist is locked.
133 static apr_status_t destroy_resource(apr_reslist_t *reslist, apr_res_t *res)
135 return reslist->destructor(res->opaque, reslist->params, reslist->pool);
176 APU_DECLARE(apr_status_t) apr_reslist_maintain(apr_reslist_t *reslist)
184 apr_thread_mutex_lock(reslist->listlock);
188 while (reslist->nidle < reslist->min && reslist->ntotal < reslist->hmax) {
190 rv = create_resource(reslist, &res);
192 free_container(reslist, res);
194 apr_thread_mutex_unlock(reslist->listlock);
199 push_resource(reslist, res);
201 reslist->ntotal++;
204 rv = apr_thread_cond_signal(reslist->avail);
206 apr_thread_mutex_unlock(reslist->listlock);
216 apr_thread_mutex_unlock(reslist->listlock);
223 while (reslist->nidle > reslist->smax && reslist->nidle > 0) {
225 res = APR_RING_LAST(&reslist->avail_list);
227 if (now - res->freed < reslist->ttl) {
233 reslist->nidle--;
234 reslist->ntotal--;
235 rv = destroy_resource(reslist, res);
236 free_container(reslist, res);
239 apr_thread_mutex_unlock(reslist->listlock);
246 apr_thread_mutex_unlock(reslist->listlock);
251 APU_DECLARE(apr_status_t) apr_reslist_create(apr_reslist_t **reslist,
316 *reslist = rl;
321 APU_DECLARE(apr_status_t) apr_reslist_destroy(apr_reslist_t *reslist)
323 return apr_pool_cleanup_run(reslist->pool, reslist, reslist_cleanup);
326 APU_DECLARE(apr_status_t) apr_reslist_acquire(apr_reslist_t *reslist,
334 apr_thread_mutex_lock(reslist->listlock);
339 while (reslist->nidle > 0) {
341 res = pop_resource(reslist);
342 if (reslist->ttl && (now - res->freed >= reslist->ttl)) {
344 reslist->ntotal--;
345 rv = destroy_resource(reslist, res);
346 free_container(reslist, res);
349 apr_thread_mutex_unlock(reslist->listlock);
356 free_container(reslist, res);
358 apr_thread_mutex_unlock(reslist->listlock);
364 while (reslist->ntotal >= reslist->hmax && reslist->nidle <= 0) {
366 if (reslist->timeout) {
367 if ((rv = apr_thread_cond_timedwait(reslist->avail,
368 reslist->listlock, reslist->timeout)) != APR_SUCCESS) {
369 apr_thread_mutex_unlock(reslist->listlock);
374 apr_thread_cond_wait(reslist->avail, reslist->listlock);
382 if (reslist->nidle > 0) {
383 res = pop_resource(reslist);
385 free_container(reslist, res);
387 apr_thread_mutex_unlock(reslist->listlock);
395 rv = create_resource(reslist, &res);
397 reslist->ntotal++;
400 free_container(reslist, res);
402 apr_thread_mutex_unlock(reslist->listlock);
408 APU_DECLARE(apr_status_t) apr_reslist_release(apr_reslist_t *reslist,
414 apr_thread_mutex_lock(reslist->listlock);
416 res = get_container(reslist);
418 push_resource(reslist, res);
420 apr_thread_cond_signal(reslist->avail);
421 apr_thread_mutex_unlock(reslist->listlock);
424 return apr_reslist_maintain(reslist);
427 APU_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist,
430 reslist->timeout = timeout;
433 APU_DECLARE(apr_uint32_t) apr_reslist_acquired_count(apr_reslist_t *reslist)
438 apr_thread_mutex_lock(reslist->listlock);
440 count = reslist->ntotal - reslist->nidle;
442 apr_thread_mutex_unlock(reslist->listlock);
448 APU_DECLARE(apr_status_t) apr_reslist_invalidate(apr_reslist_t *reslist,
453 apr_thread_mutex_lock(reslist->listlock);
455 ret = reslist->destructor(resource, reslist->params, reslist->pool);
456 reslist->ntotal--;
458 apr_thread_cond_signal(reslist->avail);
459 apr_thread_mutex_unlock(reslist->listlock);