mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-25 12:19:01 -04:00
Offloaded work used two different mechanisms: a per-loop isc_helper thread for CPU-bound crypto (DNSSEC validation, message signature checks) and the process-global libuv thread pool for blocking I/O (zone load and dump, inbound transfer apply). Neither could cancel a queued task, and the two disagreed about exclusive mode — the helper paused with its loop under isc_loopmgr_pause() but the libuv pool did not, so blocking offloaded work kept running while a loop held the exclusive lock. Unify both behind isc_work: each loop gets its own worker thread per lane — FAST for short, bounded tasks and SLOW for long, blocking ones — fed by a private queue. Separate lanes keep a short crypto task off the path of a multi-second zone dump once both run on per-loop workers; every lane parks with isc_loopmgr_pause() so exclusive mode now quiesces offloaded work too; and a still-queued task can be canceled before it starts (isc_work_cancel). isc_helper is removed and its callers select a lane. |
||
|---|---|---|
| .. | ||
| .gitignore | ||
| dig.c | ||
| dig.rst | ||
| dighost.c | ||
| dighost.h | ||
| host.c | ||
| host.rst | ||
| meson.build | ||
| nslookup.c | ||
| nslookup.rst | ||