From: Witold Kręcicki Date: Thu, 18 Oct 2018 18:16:25 +0000 (+0000) Subject: Taskmgr shutdown fixes X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfb23c73f7fc079719bca436f631cd5df3f29718;p=thirdparty%2Fbind9.git Taskmgr shutdown fixes --- diff --git a/lib/isc/task.c b/lib/isc/task.c index 0338e0f7439..e8d2fc711cf 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -1180,6 +1180,15 @@ dispatch(isc__taskmgr_t *manager, int threadid) { } } UNLOCK(manager->locks[queue]); + /* + * There might be other dispatchers waiting on empty tasks, + * wake them up. + */ + for (unsigned i=0; i < manager->workers; i++) { + LOCK(manager->locks[i]); + BROADCAST(&manager->work_available[i]); + UNLOCK(manager->locks[i]); + } } typedef struct st { @@ -1421,8 +1430,10 @@ isc_taskmgr_destroy(isc_taskmgr_t **managerp) { task != NULL; task = NEXT(task, link)) { LOCK(&task->lock); - if (task_shutdown(task)) - push_readyq(manager, task, 0); + if (task_shutdown(task)) { + int queue = task->threadid % manager->queues; + push_readyq(manager, task, queue); + } UNLOCK(&task->lock); } /*