From: Ondřej Surý Date: Thu, 24 Jul 2025 09:02:15 +0000 (+0200) Subject: Add rcu_barrier() to isc__log_shutdown() X-Git-Tag: v9.21.11~11^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2e107508a2a229336a4afe6a74784a255633509;p=thirdparty%2Fbind9.git Add rcu_barrier() to isc__log_shutdown() There is a data race when QP is reclaiming chunks on the call_rcu threads and it tries to log the number of reclaimed chunks while the server is shuttingdown. Workaround this by adding rcu_barrier() before shuttingdown the global log context. --- diff --git a/lib/isc/log.c b/lib/isc/log.c index d46054f4344..512e7247042 100644 --- a/lib/isc/log.c +++ b/lib/isc/log.c @@ -1573,6 +1573,14 @@ isc__log_initialize(void) { void isc__log_shutdown(void) { + /* + * There is a data race when the QP database reclaims chunks on the + * call_rcu threads and tries to log the number of reclaimed chunks + * while the server is shutting down. Work around this by adding + * an rcu_barrier() before shutting down the global logging context. + */ + rcu_barrier(); + REQUIRE(VALID_CONTEXT(isc__lctx)); isc_mem_t *mctx = isc__lctx->mctx;