]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Create event to run ORTC algorithm exactly once
authorIgor Putovny <igor.putovny@nic.cz>
Tue, 21 Nov 2023 11:58:24 +0000 (12:58 +0100)
committerIgor Putovny <igor.putovny@nic.cz>
Tue, 21 Nov 2023 11:58:24 +0000 (12:58 +0100)
proto/aggregator/aggregator.c
proto/aggregator/aggregator.h

index 2ed6f55c78f9f7dd4588f0616af8bb11826aa4a4..f520ae0c950d5ede25779d2aacf1e85ad26ec09b 100644 (file)
@@ -1178,6 +1178,7 @@ aggregator_rt_notify(struct proto *P, struct channel *src_ch, net *net, rte *new
   }
   HASH_WALK_END;
 
+  ev_schedule(&p->reload_trie);
 
   /* Announce changes */
   if (old_bucket)
@@ -1275,6 +1276,11 @@ aggregator_start(struct proto *P)
   p->trie_slab = sl_new(p->p.pool, sizeof(struct trie_node));
   p->root = new_node(p->trie_slab);
 
+  p->reload_trie = (event) {
+    .hook = calculate_trie,
+    .data = p,
+  };
+
   return PS_UP;
 }
 
@@ -1301,6 +1307,7 @@ aggregator_shutdown(struct proto *P)
   }
   HASH_WALK_END;
 
+  ev_postpone(&p->reload_trie);
   delete_trie(p->root);
   p->root = NULL;
 
index 2d0a6167c47f892709d4197182e0398f3f41d0f6..22638ac210ec0f68c4b93d52e61d71ea0e517114 100644 (file)
@@ -67,6 +67,8 @@ struct aggregator_proto {
   /* Aggregation trie */
   slab *trie_slab;
   struct trie_node *root;
+
+  struct event reload_trie;
 };
 
 enum aggr_item_type {