]> granicus.if.org Git - apache/commitdiff
Allow for pass-thru or early termination of doall() loops
authorJim Jagielski <jim@apache.org>
Thu, 1 Oct 2009 19:17:02 +0000 (19:17 +0000)
committerJim Jagielski <jim@apache.org>
Thu, 1 Oct 2009 19:17:02 +0000 (19:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@820755 13f79535-47bb-0310-9956-ffa450edef68

modules/slotmem/mod_slotmem_plain.c
modules/slotmem/mod_slotmem_shm.c

index c00213a98e971aaa44197d0a3bf34338e099e1d2..62eb17de327961f0d29ff7f5f6deb06210d384c4 100644 (file)
@@ -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)
index ff9627fe924be2893297f1a805e9bc0250b62322..744ec0cb44cca5fb8b9eaef9c38f935c2943ba1a 100644 (file)
@@ -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,