mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-14 22:49:59 -04:00
The delegation database kept one SIEVE LRU list per loop so that node eviction could run lock-free on each node's owning loop; this required every node to hold a loop reference and to defer its own destruction to that loop via isc_async_run(). Move the SIEVE unlink into the QP write transaction, taking the evicted node directly from dns_qp_deletename(), which serialises every list mutation under the qpmulti writer lock and lets a single shared list replace the per-loop arrays. Node and database teardown are now synchronous. The QP trie and the SIEVE list are wrapped in a reference-counted holder. Each node keeps a reference to the holder so it (and its memory context) stays valid until the node is destroyed, while shutdown drains the SIEVE and destroys the trie from an RCU callback and frees the holder once the last node drops its reference. Reuse across a reconfiguration now moves ownership of the holder to the new view instead of sharing it through a separate owners counter, so dns_delegdb_reuse() is removed. |
||
|---|---|---|
| .. | ||
| dns | ||
| dst | ||
| irs | ||
| .clang-format | ||
| meson.build | ||