]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Nest: Fix bitmap cleanup
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 10 Dec 2019 17:18:02 +0000 (18:18 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 10 Dec 2019 17:18:02 +0000 (18:18 +0100)
Channel currently does not have independent pool and uses protocol pool,
which is freed when protocol changes state to down, while channel is
still in flushing. Move some some cleanup code to channel_do_flush()
so it is done before freeing of protocol pool.

nest/proto.c

index ac34d86f3659c93f4f06272d2eeafd714ba43418..6051ba9db0e11655887c41273cc7b69895ed8174 100644 (file)
@@ -397,6 +397,12 @@ channel_do_flush(struct channel *c)
     channel_graceful_restart_unlock(c);
 
   CALL(c->channel->shutdown, c);
+
+  /* This have to be done in here, as channel pool is freed before channel_do_down() */
+  bmap_free(&c->export_map);
+  c->in_table = NULL;
+  c->reload_event = NULL;
+  c->out_table = NULL;
 }
 
 static void
@@ -411,7 +417,7 @@ channel_do_down(struct channel *c)
   if ((c->stats.imp_routes + c->stats.filt_routes) != 0)
     log(L_ERR "%s: Channel %s is down but still has some routes", c->proto->name, c->name);
 
-  bmap_free(&c->export_map);
+  // bmap_free(&c->export_map);
   memset(&c->stats, 0, sizeof(struct proto_stats));
 
   c->in_table = NULL;