summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_keepalives.c17
-rw-r--r--bgpd/bgp_keepalives.h12
2 files changed, 7 insertions, 22 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;
diff --git a/bgpd/bgp_keepalives.h b/bgpd/bgp_keepalives.h
index d1cb7d246..e8d0d3d40 100644
--- a/bgpd/bgp_keepalives.h
+++ b/bgpd/bgp_keepalives.h
@@ -74,18 +74,6 @@ extern void bgp_keepalives_init(void);
extern void *bgp_keepalives_start(void *arg);
/**
- * Poking function for keepalives pthread.
- *
- * Under normal circumstances the pthread will automatically wake itself
- * whenever it is necessary to do work. This function may be used to force the
- * thread to wake up and see if there is any work to do, or if it is time to
- * die.
- *
- * It is not necessary to call this after bgp_keepalives_on().
- */
-extern void bgp_keepalives_wake(void);
-
-/**
* Stops the thread and blocks until it terminates.
*/
int bgp_keepalives_stop(struct frr_pthread *fpt, void **result);