From 2222728a4f6f5bbdceadfc7c6d156d37391b989f Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 28 Nov 2023 15:05:55 -0800 Subject: [PATCH] release RCU in dns_qpmulti_snapshot() previously, an RCU critical section was held open for the duration of a snapshot. this should not be necessary, as the snapshot makes local copies of QP trie metadata, and it causes problems when a DB iterator is held open between two loop events. we now call rcu_read_unlock() after setting up the snapshot. --- lib/dns/qp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/dns/qp.c b/lib/dns/qp.c index 4ea05e0968..4e70fa0dac 100644 --- a/lib/dns/qp.c +++ b/lib/dns/qp.c @@ -1391,6 +1391,8 @@ dns_qpmulti_snapshot(dns_qpmulti_t *multi, dns_qpsnap_t **qpsp) { *qpsp = qps; UNLOCK(&multi->mutex); + + rcu_read_unlock(); } void @@ -1417,8 +1419,6 @@ dns_qpsnap_destroy(dns_qpmulti_t *multi, dns_qpsnap_t **qpsp) { *qpsp = NULL; UNLOCK(&multi->mutex); - - rcu_read_unlock(); } /***********************************************************************