isc_result_t
isc_task_beginexclusive(isc_task_t *task0) {
isc__task_t *task = (isc__task_t *)task0;
- isc__taskmgr_t *manager = task->manager;
+ isc__taskmgr_t *manager;
REQUIRE(VALID_TASK(task));
+ manager = task->manager;
+
REQUIRE(task->state == task_state_running);
LOCK(&manager->excl_lock);
void
isc_task_endexclusive(isc_task_t *task0) {
isc__task_t *task = (isc__task_t *)task0;
- isc__taskmgr_t *manager = task->manager;
+ isc__taskmgr_t *manager;
REQUIRE(VALID_TASK(task));
REQUIRE(task->state == task_state_running);
+
+ manager = task->manager;
+
LOCK(&manager->halt_lock);
REQUIRE(atomic_load_relaxed(&manager->exclusive_req) == true);
atomic_store_relaxed(&manager->exclusive_req, false);