remote: always re-schedule update timeout
authorDavid Bauer <mail@david-bauer.net>
Sat, 23 Oct 2021 22:40:55 +0000 (00:40 +0200)
committerDavid Bauer <mail@david-bauer.net>
Fri, 29 Oct 2021 23:14:46 +0000 (01:14 +0200)
This commit fixes updates not triggering due to a race-condition in
usteer.

When usteer does not yet have local-nodes when loading config, the
scheduled remote-update is not re-scheduled, leading to usteer only
exchanging node-messages on STA-events, leading to expiring remotes on
other remote nodes in low-event scenarios.

Signed-off-by: David Bauer <mail@david-bauer.net>
remote.c

index a464b3bf50374700c2e71b302cb1c3c9cf5f324c..37d80e6e341873662fa8bae72726f89cbbea1c14 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -622,17 +622,16 @@ usteer_send_update_timer(struct uloop_timeout *t)
        struct usteer_node *node;
        void *c;
 
-       if (avl_is_empty(&local_nodes) && !host_info_blob)
-               return;
-
        usteer_update_time();
        uloop_timeout_set(t, config.remote_update_interval);
 
-       c = usteer_update_init();
-       for_each_local_node(node)
-               usteer_send_node(node, NULL);
+       if (!avl_is_empty(&local_nodes) || host_info_blob) {
+               c = usteer_update_init();
+               for_each_local_node(node)
+                       usteer_send_node(node, NULL);
 
-       usteer_update_send(c);
+               usteer_update_send(c);
+       }
        usteer_check_timeout();
 }