Curl_conncache_foreach: allow callback to break loop
authorDaniel Stenberg <daniel@haxx.se>
Tue, 11 Dec 2012 19:13:29 +0000 (20:13 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 24 Dec 2012 22:51:02 +0000 (23:51 +0100)
... and have it take a proper 'struct connectdata *' as first argument

lib/conncache.c
lib/conncache.h

index 4bca7ba..a3a90f8 100644 (file)
@@ -180,10 +180,13 @@ void Curl_conncache_remove_conn(struct conncache *connc,
 
 /* This function iterates the entire connection cache and calls the
    function func() with the connection pointer as the first argument
-   and the supplied 'param' argument as the other */
+   and the supplied 'param' argument as the other,
+
+   Return 0 from func() to continue the loop, return 1 to abort it.
+ */
 void Curl_conncache_foreach(struct conncache *connc,
                             void *param,
-                            void (*func)(void *conn, void *param))
+                            int (*func)(struct connectdata *conn, void *param))
 {
   struct curl_hash_iterator iter;
   struct curl_llist_element *curr;
@@ -208,7 +211,8 @@ void Curl_conncache_foreach(struct conncache *connc,
       conn = curr->ptr;
       curr = curr->next;
 
-      func(conn, param);
+      if(1 == func(conn, param))
+        return;
     }
 
     he = Curl_hash_next_element(&iter);
index 7b7baae..03b129d 100644 (file)
@@ -48,7 +48,8 @@ void Curl_conncache_remove_conn(struct conncache *connc,
 
 void Curl_conncache_foreach(struct conncache *connc,
                             void *param,
-                            void (*func)(void *, void *));
+                            int (*func)(struct connectdata *conn,
+                                        void *param));
 
 struct connectdata *
 Curl_conncache_find_first_connection(struct conncache *connc);