Fix nodes joining the VPN after tincctl top started.
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 2 Jun 2011 19:14:50 +0000 (21:14 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 2 Jun 2011 19:14:50 +0000 (21:14 +0200)
src/list.c
src/list.h
src/top.c

index 9d4920b..9b67791 100644 (file)
@@ -111,6 +111,26 @@ list_node_t *list_insert_after(list_t *list, list_node_t *after, void *data) {
        return node;
 }
 
+list_node_t *list_insert_before(list_t *list, list_node_t *before, void *data) {
+       list_node_t *node;
+
+       node = list_alloc_node();
+
+       node->data = data;
+       node->next = before;
+       node->prev = before->prev;
+       before->prev = node;
+
+       if(node->prev)
+               node->prev->next = node;
+       else
+               list->head = node;
+
+       list->count++;
+
+       return node;
+}
+
 void list_unlink_node(list_t *list, list_node_t *node) {
        if(node->prev)
                node->prev->next = node->next;
index a458039..4fe48db 100644 (file)
@@ -55,6 +55,7 @@ extern void list_free_node(list_t *, list_node_t *);
 extern list_node_t *list_insert_head(list_t *, void *);
 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_unlink_node(list_t *, list_node_t *);
 extern void list_delete_node(list_t *, list_node_t *);
index 62c46f5..dc1fecf 100644 (file)
--- a/src/top.c
+++ b/src/top.c
@@ -108,7 +108,9 @@ static void update(int fd) {
                        } else {
                                found = xmalloc_and_zero(sizeof *found);
                                found->name = xstrdup(name);
-                               list_insert_after(&node_list, i, found);
+                               fprintf(stderr, "Inserting %s before %s\n", found->name, node->name);
+                               list_insert_before(&node_list, i, found);
+                               changed = true;
                                break;
                        }
                }
@@ -117,6 +119,7 @@ static void update(int fd) {
                        found = xmalloc_and_zero(sizeof *found);
                        found->name = xstrdup(name);
                        list_insert_tail(&node_list, found);
+                       changed = true;
                }
 
                found->known = true;