lib/isc/task.c: Fix invalid order of DbC checks that could cause dereference before NULL check

This commit is contained in:
Ondřej Surý 2019-09-27 12:02:41 +02:00
parent e8948fd9b4
commit c662969da1

View file

@ -1573,10 +1573,12 @@ isc_taskmgr_excltask(isc_taskmgr_t *mgr0, isc_task_t **taskp) {
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);
@ -1605,10 +1607,13 @@ isc_task_beginexclusive(isc_task_t *task0) {
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);