From d265a0f32f44c9fdec1bd92d40aa84c995bfd170 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Thu, 1 Oct 2009 19:17:02 +0000 Subject: [PATCH] Allow for pass-thru or early termination of doall() loops git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@820755 13f79535-47bb-0310-9956-ffa450edef68 --- modules/slotmem/mod_slotmem_plain.c | 8 ++++++-- modules/slotmem/mod_slotmem_shm.c | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/slotmem/mod_slotmem_plain.c b/modules/slotmem/mod_slotmem_plain.c index c00213a98e..62eb17de32 100644 --- a/modules/slotmem/mod_slotmem_plain.c +++ b/modules/slotmem/mod_slotmem_plain.c @@ -43,6 +43,8 @@ static apr_status_t slotmem_do(ap_slotmem_instance_t *mem, ap_slotmem_callback_f unsigned int i; void *ptr; char *inuse; + apr_status_t retval = APR_SUCCESS; + if (!mem) return APR_ENOSHMAVAIL; @@ -52,11 +54,13 @@ static apr_status_t slotmem_do(ap_slotmem_instance_t *mem, ap_slotmem_callback_f for (i = 0; i < mem->num; i++, inuse++) { if (!AP_SLOTMEM_IS_PREGRAB(mem) || (AP_SLOTMEM_IS_PREGRAB(mem) && *inuse)) { - func((void *) ptr, data, pool); + retval = func((void *) ptr, data, pool); + if (retval != APR_SUCCESS) + break; } ptr += mem->size; } - return APR_SUCCESS; + return retval; } static apr_status_t slotmem_create(ap_slotmem_instance_t **new, const char *name, apr_size_t item_size, unsigned int item_num, ap_slotmem_type_t type, apr_pool_t *pool) diff --git a/modules/slotmem/mod_slotmem_shm.c b/modules/slotmem/mod_slotmem_shm.c index ff9627fe92..744ec0cb44 100644 --- a/modules/slotmem/mod_slotmem_shm.c +++ b/modules/slotmem/mod_slotmem_shm.c @@ -207,6 +207,7 @@ static apr_status_t slotmem_doall(ap_slotmem_instance_t *mem, unsigned int i; void *ptr; char *inuse; + apr_status_t retval = APR_SUCCESS; if (!mem) { return APR_ENOSHMAVAIL; @@ -217,11 +218,13 @@ static apr_status_t slotmem_doall(ap_slotmem_instance_t *mem, for (i = 0; i < mem->desc.num; i++, inuse++) { if (!AP_SLOTMEM_IS_PREGRAB(mem) || (AP_SLOTMEM_IS_PREGRAB(mem) && *inuse)) { - func((void *) ptr, data, pool); + retval = func((void *) ptr, data, pool); + if (retval != APR_SUCCESS) + break; } ptr += mem->desc.size; } - return APR_SUCCESS; + return retval; } static apr_status_t slotmem_create(ap_slotmem_instance_t **new, -- 2.50.1