From: Mark Stapp Date: Tue, 6 Sep 2022 12:34:10 +0000 (-0700) Subject: bgpd: release rcu lock in bgp keepalive pthread X-Git-Tag: frr-8.3.2~1^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=74d699cb8b794da51d48cbaf29769f068d89ccbc;p=matthieu%2Ffrr.git bgpd: release rcu lock in bgp keepalive pthread Don't hold the rcu lock in the bgp keepalive pthread: it blocks the rcu pthread and prevents log-file deletion. Signed-off-by: Mark Stapp (cherry picked from commit 85ba04f3897d3c9def83d8b291b6c6a276e96c54) --- diff --git a/bgpd/bgp_keepalives.c b/bgpd/bgp_keepalives.c index 86202a0e3d..d0eb249d38 100644 --- a/bgpd/bgp_keepalives.c +++ b/bgpd/bgp_keepalives.c @@ -175,6 +175,15 @@ void *bgp_keepalives_start(void *arg) struct timeval next_update = {0, 0}; struct timespec next_update_ts = {0, 0}; + /* + * The RCU mechanism for each pthread is initialized in a "locked" + * state. That's ok for pthreads using the frr_pthread, + * thread_fetch event loop, because that event loop unlocks regularly. + * For foreign pthreads, the lock needs to be unlocked so that the + * background rcu pthread can run. + */ + rcu_read_unlock(); + peerhash_mtx = XCALLOC(MTYPE_TMP, sizeof(pthread_mutex_t)); peerhash_cond = XCALLOC(MTYPE_TMP, sizeof(pthread_cond_t));