mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-25 19:04:57 -05:00
The basic scenario for the problem was that in the process of resolving a query, if any rrset was eligible for prefetching, then it would trigger a call to query_prefetch(), this call would run in parallel to the normal query processing. The problem arises due to the fact that both query_prefetch(), and, in the original thread, a call to ns_query_recurse(), try to attach to the recursionquota, but recursing client stats counter is only incremented if ns_query_recurse() attachs to it first. Conversely, if fetch_callback() is called before prefetch_done(), it would not only detach from recursionquota, but also decrement the stats counter, if query_prefetch() attached to te quota first that would result in a decrement not matched by an increment, as expected. To solve this issue an atomic bool was added, it is set once in ns_query_recurse(), allowing fetch_callback() to check for it and decrement stats accordingly. For a more compreensive explanation check the thread comment below: https://gitlab.isc.org/isc-projects/bind9/-/issues/1719#note_145857 |
||
|---|---|---|
| .. | ||
| ns | ||
| .clang-format | ||