diff --git a/eigrpd/eigrp_main.c b/eigrpd/eigrp_main.c index 705e04b34d..c4ca07178c 100644 --- a/eigrpd/eigrp_main.c +++ b/eigrpd/eigrp_main.c @@ -100,6 +100,8 @@ static void sigint(void) { zlog_notice("Terminating on signal"); eigrp_terminate(); + + exit(0); } /* SIGUSR1 handler. */ diff --git a/lib/libfrr.c b/lib/libfrr.c index 3e2e008223..d5078f98aa 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -886,6 +886,7 @@ void frr_fini(void) zprivs_terminate(di->privs); /* signal_init -> nothing needed */ thread_master_free(master); + master = NULL; closezlog(); /* frrmod_init -> nothing needed / hooks */ diff --git a/lib/thread.c b/lib/thread.c index 621eed0ff0..a69bd2f0d5 100644 --- a/lib/thread.c +++ b/lib/thread.c @@ -571,6 +571,7 @@ void thread_master_free(struct thread_master *m) close(m->io_pipe[0]); close(m->io_pipe[1]); list_delete(m->cancel_req); + m->cancel_req = NULL; hash_clean(m->cpu_record, cpu_record_hash_free); hash_free(m->cpu_record);