]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: block io thread reads once shutdown has started
authorLou Berger <lberger@labn.net>
Thu, 10 May 2018 12:47:11 +0000 (08:47 -0400)
committerLou Berger <lberger@labn.net>
Thu, 10 May 2018 12:47:11 +0000 (08:47 -0400)
Signed-off-by: Lou Berger <lberger@labn.net>
bgpd/bgp_io.c
bgpd/bgp_main.c
bgpd/bgpd.c
bgpd/bgpd.h

index 3882ff8b5677e1caa91b091e828f5ad041354dbd..69c92e829c59ce6174a792ee08df89470cd6e6b6 100644 (file)
@@ -179,7 +179,7 @@ static int bgp_process_reads(struct thread *thread)
 
        peer = THREAD_ARG(thread);
 
-       if (peer->fd < 0)
+       if (peer->fd < 0 || bm->terminating)
                return -1;
 
        struct frr_pthread *fpt = frr_pthread_get(PTHREAD_IO);
index 5158717b5d97ec2d6bec927b81175248fc25c7e3..004bdd90a24fa8f6355d02b9311a107bec7937e7 100644 (file)
@@ -143,6 +143,8 @@ void sighup(void)
 __attribute__((__noreturn__)) void sigint(void)
 {
        zlog_notice("Terminating on signal");
+       assert(bm->terminating == false);
+       bm->terminating = true; /* global flag that shutting down */
 
        if (!retain_mode)
                bgp_terminate();
index a331fad5d4a242397050bf1438a2c3df959745d8..58d9fb24e03ad268e67db39000cda5b4ab10f3b4 100644 (file)
@@ -7559,6 +7559,7 @@ void bgp_master_init(struct thread_master *master)
        bm->start_time = bgp_clock();
        bm->t_rmap_update = NULL;
        bm->rmap_update_timer = RMAP_DEFAULT_UPDATE_TIMER;
+       bm->terminating = false;
 
        bgp_process_queue_init();
 
index 470fd108501f6ce1d79fc254b6633814439709e7..f460b0fa986441307fb59c8294f713f4731dac86 100644 (file)
@@ -144,6 +144,7 @@ struct bgp_master {
        /* dynamic mpls label allocation pool */
        struct labelpool labelpool;
 
+       bool terminating;       /* global flag that sigint terminate seen */
        QOBJ_FIELDS
 };
 DECLARE_QOBJ_TYPE(bgp_master)