summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_keepalives.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_keepalives.c')
-rw-r--r--bgpd/bgp_keepalives.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/bgpd/bgp_keepalives.c b/bgpd/bgp_keepalives.c
index 604d6c950..d9c653f56 100644
--- a/bgpd/bgp_keepalives.c
+++ b/bgpd/bgp_keepalives.c
@@ -269,8 +269,9 @@ void bgp_keepalives_on(struct peer *peer)
peer_lock(peer);
}
SET_FLAG(peer->thread_flags, PEER_THREAD_KEEPALIVES_ON);
+ /* Force the keepalive thread to wake up */
+ pthread_cond_signal(peerhash_cond);
}
- bgp_keepalives_wake();
}
void bgp_keepalives_off(struct peer *peer)
@@ -300,19 +301,15 @@ void bgp_keepalives_off(struct peer *peer)
}
}
-void bgp_keepalives_wake(void)
-{
- frr_with_mutex (peerhash_mtx) {
- pthread_cond_signal(peerhash_cond);
- }
-}
-
int bgp_keepalives_stop(struct frr_pthread *fpt, void **result)
{
assert(fpt->running);
- atomic_store_explicit(&fpt->running, false, memory_order_relaxed);
- bgp_keepalives_wake();
+ frr_with_mutex (peerhash_mtx) {
+ atomic_store_explicit(&fpt->running, false,
+ memory_order_relaxed);
+ pthread_cond_signal(peerhash_cond);
+ }
pthread_join(fpt->thread, result);
return 0;