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.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
Reference in New Issue
Block a user