From 2a6ce9e2ce5fb292496cf0e14fb9f161d00c65a8 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 20 May 2020 06:49:42 +0900 Subject: [PATCH] exapmle/nvmf: Destroy dynamically exited thread at nvmf_reactor_run() Signed-off-by: Shuhei Matsumoto Change-Id: I6782e8c59df5f20cb6c368482633875d6e9b7235 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2538 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- examples/nvmf/nvmf/nvmf.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/nvmf/nvmf/nvmf.c b/examples/nvmf/nvmf/nvmf.c index de2b9f79b..bec1f00c7 100644 --- a/examples/nvmf/nvmf/nvmf.c +++ b/examples/nvmf/nvmf/nvmf.c @@ -198,8 +198,15 @@ nvmf_reactor_run(void *arg) spdk_thread_poll(thread, 0, 0); - pthread_mutex_lock(&nvmf_reactor->mutex); - TAILQ_INSERT_TAIL(&nvmf_reactor->threads, lw_thread, link); + if (spdk_unlikely(spdk_thread_is_exited(thread) && + spdk_thread_is_idle(thread))) { + spdk_thread_destroy(thread); + + pthread_mutex_lock(&nvmf_reactor->mutex); + } else { + pthread_mutex_lock(&nvmf_reactor->mutex); + TAILQ_INSERT_TAIL(&nvmf_reactor->threads, lw_thread, link); + } } pthread_mutex_unlock(&nvmf_reactor->mutex); } while (!g_reactors_exit);