]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixed channel export map confusion
authorMaria Matejka <mq@jmq.cz>
Tue, 23 Nov 2021 11:12:32 +0000 (11:12 +0000)
committerMaria Matejka <mq@jmq.cz>
Tue, 23 Nov 2021 11:12:32 +0000 (11:12 +0000)
nest/proto.c
nest/rt-table.c

index 978582ca595d71d15525549f8c62ad5ecdbe49eb..7a09ed642ce0fb980049b5d0c962b7fbdfdd7915 100644 (file)
@@ -596,6 +596,9 @@ channel_export_stopped(struct rt_export_request *req)
   mb_free(c->out_req.name);
   c->out_req.name = NULL;
 
+  bmap_free(&c->export_map);
+  bmap_free(&c->export_reject_map);
+
   if (c->restart_export)
   {
     c->restart_export = 0;
@@ -993,9 +996,6 @@ channel_do_pause(struct channel *c)
   }
 
   channel_roa_unsubscribe_all(c);
-
-  bmap_free(&c->export_map);
-  bmap_free(&c->export_reject_map);
 }
 
 static void
@@ -1035,16 +1035,11 @@ channel_do_down(struct channel *c)
 
   c->proto->active_channels--;
 
-  // bmap_free(&c->export_map);
   memset(&c->import_stats, 0, sizeof(struct channel_import_stats));
   memset(&c->export_stats, 0, sizeof(struct channel_export_stats));
 
   CALL(c->channel->cleanup, c);
 
-  /* This have to be done in here, as channel pool is freed before channel_do_down() */
-  bmap_free(&c->export_map);
-  bmap_free(&c->export_reject_map);
-
   /* Schedule protocol shutddown */
   if (proto_is_done(c->proto))
     proto_send_event(c->proto);
index d09abbef713682db9b47e553f15eebaa1e3f179e..c53fd195bf6dd4b66d31a1232fbc5d784609ed25 100644 (file)
@@ -507,7 +507,7 @@ export_filter_(struct channel *c, rte *rt, linpool *pool, int silent)
       stats->updates_rejected++;
       if (v == RIC_REJECT)
        channel_rte_trace_out(D_FILTERS, c, rt, "rejected by protocol");
-      goto reject_noset;
+      goto reject;
 
     }
   if (v > 0)