Improve the Userspace RCU integration
This commit allows BIND 9 to be compiled with different flavours of Userspace RCU, and improves the integration between Userspace RCU and our event loop:
-
In the RCU QSBR, the thread is put offline when polling and online when rcu_dereference, rcu_assign_pointer (or friends) are called.
-
In other RCU modes, we check that we are not reading when reaching the quiescent callback in the event loop.
-
We register the thread before uv_work_run() callback is called and after it has finished. The rcu_(un)register_thread() has a large overhead, but that's fine in this case.
This is a prerequisite for !7668 (merged) - see #3934 (closed)
Edited by Tony Finch