aboutsummaryrefslogtreecommitdiff
path: root/src/core/taskq.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/taskq.c')
-rw-r--r--src/core/taskq.c22
1 files changed, 2 insertions, 20 deletions
diff --git a/src/core/taskq.c b/src/core/taskq.c
index 15351840..f0712e59 100644
--- a/src/core/taskq.c
+++ b/src/core/taskq.c
@@ -18,7 +18,6 @@ struct nni_task {
nni_taskq * task_tq;
unsigned task_busy;
bool task_prep;
- bool task_fini;
nni_mtx task_mtx;
nni_cv task_cv;
};
@@ -56,14 +55,6 @@ nni_taskq_thread(void *self)
nni_mtx_lock(&task->task_mtx);
task->task_busy--;
if (task->task_busy == 0) {
- if (task->task_fini) {
- task->task_fini = false;
- nni_mtx_unlock(&task->task_mtx);
- nni_task_fini(task);
-
- nni_mtx_lock(&tq->tq_mtx);
- continue;
- }
nni_cv_wake(&task->task_cv);
}
nni_mtx_unlock(&task->task_mtx);
@@ -158,12 +149,6 @@ nni_task_exec(nni_task *task)
nni_mtx_lock(&task->task_mtx);
task->task_busy--;
if (task->task_busy == 0) {
- if (task->task_fini) {
- task->task_fini = false;
- nni_mtx_unlock(&task->task_mtx);
- nni_task_fini(task);
- return;
- }
nni_cv_wake(&task->task_cv);
}
nni_mtx_unlock(&task->task_mtx);
@@ -238,11 +223,8 @@ nni_task_fini(nni_task *task)
{
NNI_ASSERT(!nni_list_node_active(&task->task_node));
nni_mtx_lock(&task->task_mtx);
- if (task->task_busy) {
- // destroy later.
- task->task_fini = true;
- nni_mtx_unlock(&task->task_mtx);
- return;
+ while (task->task_busy) {
+ nni_cv_wait(&task->task_cv);
}
nni_mtx_unlock(&task->task_mtx);
nni_cv_fini(&task->task_cv);