summaryrefslogtreecommitdiff
path: root/zebra/zebra_fpm.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-05-18 15:59:43 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-05-19 10:02:19 -0400
commit540334324c59e3ae92622ba211b073488e477460 (patch)
tree6c5f2bfa0585029e50b439b6615bd3f70368c0d6 /zebra/zebra_fpm.c
parent0eaa6523f6620a8ab2db0df6879e4b64dd27a6fe (diff)
zebra: Properly handle zfpm_g->t_conn_down in zebra_fpm.c
The t_conn_down pointer was being set to NULL when it already was. The t_conn_down pointer was being dropped( and leaving a thread possibly running in the background ) which could cause problems on shutdown. And finally when shutting down the t_conn_down event was not being stopped at all. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/zebra_fpm.c')
-rw-r--r--zebra/zebra_fpm.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/zebra/zebra_fpm.c b/zebra/zebra_fpm.c
index e379a5868c..4c2947cfd3 100644
--- a/zebra/zebra_fpm.c
+++ b/zebra/zebra_fpm.c
@@ -497,6 +497,11 @@ static inline void zfpm_connect_off(void)
EVENT_OFF(zfpm_g->t_connect);
}
+static inline void zfpm_conn_down_off(void)
+{
+ EVENT_OFF(zfpm_g->t_conn_down);
+}
+
/*
* zfpm_conn_up_thread_cb
*
@@ -635,8 +640,6 @@ static void zfpm_conn_down_thread_cb(struct event *thread)
while ((mac = TAILQ_FIRST(&zfpm_g->mac_q)) != NULL)
zfpm_mac_info_del(mac);
- zfpm_g->t_conn_down = NULL;
-
iter = &zfpm_g->t_conn_down_state.iter;
while ((rnode = zfpm_rnodes_iter_next(iter))) {
@@ -667,7 +670,6 @@ static void zfpm_conn_down_thread_cb(struct event *thread)
zfpm_g->stats.t_conn_down_yields++;
zfpm_rnodes_iter_pause(iter);
- zfpm_g->t_conn_down = NULL;
event_add_timer_msec(zfpm_g->master, zfpm_conn_down_thread_cb,
NULL, 0, &zfpm_g->t_conn_down);
return;
@@ -712,7 +714,7 @@ static void zfpm_connection_down(const char *detail)
*/
assert(!zfpm_g->t_conn_down);
zfpm_rnodes_iter_init(&zfpm_g->t_conn_down_state.iter);
- zfpm_g->t_conn_down = NULL;
+ zfpm_conn_down_off();
event_add_timer_msec(zfpm_g->master, zfpm_conn_down_thread_cb, NULL, 0,
&zfpm_g->t_conn_down);
zfpm_g->stats.t_conn_down_starts++;
@@ -2042,6 +2044,7 @@ static int zfpm_fini(void)
zfpm_write_off();
zfpm_read_off();
zfpm_connect_off();
+ zfpm_conn_down_off();
zfpm_stop_stats_timer();