Fix deleting connections from the connection list.
authorGuus Sliepen <guus@tinc-vpn.org>
Tue, 9 Oct 2012 11:23:12 +0000 (13:23 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Tue, 9 Oct 2012 11:23:12 +0000 (13:23 +0200)
src/connection.c
src/list.c
src/list.h

index cbe704b..598b5e5 100644 (file)
@@ -91,12 +91,7 @@ void connection_add(connection_t *c) {
 }
 
 void connection_del(connection_t *c) {
-       for list_each(connection_t, c, connection_list) {
-               if(node->data == c) {
-                       list_delete_node(connection_list, node);
-                       return;
-               }
-       }
+       list_delete(connection_list, c);
 }
 
 bool dump_connections(connection_t *cdump) {
index 8d0c9c8..18765d4 100644 (file)
@@ -150,6 +150,12 @@ void list_delete_tail(list_t *list) {
        list_delete_node(list, list->tail);
 }
 
+void list_delete(list_t *list, const void *data) {
+       for(list_node_t *node = list->head, *next; next = node ? node->next : NULL, node; node = next)
+               if(node->data == data)
+                       list_delete_node(list, node);
+}
+
 /* Head/tail lookup */
 
 void *list_get_head(list_t *list) {
@@ -169,7 +175,7 @@ void *list_get_tail(list_t *list) {
 /* Fast list deletion */
 
 void list_delete_list(list_t *list) {
-       for(list_node_t *node = list->head, *next; next = node->next, node; node = next)
+       for(list_node_t *node = list->head, *next; next = node ? node->next : NULL, node; node = next)
                list_free_node(list, node);
 
        list_free(list);
@@ -178,12 +184,12 @@ void list_delete_list(list_t *list) {
 /* Traversing */
 
 void list_foreach_node(list_t *list, list_action_node_t action) {
-       for(list_node_t *node = list->head, *next; next = node->next, node; node = next)
+       for(list_node_t *node = list->head, *next; next = node ? node->next : NULL, node; node = next)
                action(node);
 }
 
 void list_foreach(list_t *list, list_action_t action) {
-       for(list_node_t *node = list->head, *next; next = node->next, node; node = next)
+       for(list_node_t *node = list->head, *next; next = node ? node->next : NULL, node; node = next)
                if(node->data)
                        action(node->data);
 }
index 855b427..4a86316 100644 (file)
@@ -57,6 +57,8 @@ extern list_node_t *list_insert_tail(list_t *, void *);
 extern list_node_t *list_insert_after(list_t *, list_node_t *, void *);
 extern list_node_t *list_insert_before(list_t *, list_node_t *, void *);
 
+extern void list_delete(list_t *, const void *);
+
 extern void list_unlink_node(list_t *, list_node_t *);
 extern void list_delete_node(list_t *, list_node_t *);