From be19fe4bd700aa159126096d9bd291d64e3414a4 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Thu, 17 Nov 2022 03:15:35 +0000 Subject: [PATCH] bdevio: call spdk_thread_exit() We need to make sure we call spdk_thread_exit() to clean up the io and ut threads in the bdevio app. Signed-off-by: Jim Harris Change-Id: I29774b36c5f294072011fcf810e8b7346842c303 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15503 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Changpeng Liu --- test/bdev/bdevio/bdevio.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/test/bdev/bdevio/bdevio.c b/test/bdev/bdevio/bdevio.c index 53b4fca0f..74b17e186 100644 --- a/test/bdev/bdevio/bdevio.c +++ b/test/bdev/bdevio/bdevio.c @@ -74,6 +74,14 @@ wake_ut_thread(void) pthread_mutex_unlock(&g_test_mutex); } +static void +__exit_io_thread(void *arg) +{ + assert(spdk_get_thread() == g_thread_io); + spdk_thread_exit(g_thread_io); + wake_ut_thread(); +} + static void __get_io_channel(void *arg) { @@ -1220,6 +1228,9 @@ __stop_init_thread(void *arg) rpc_perform_tests_cb(num_failures, request); return; } + assert(spdk_get_thread() == g_thread_init); + assert(spdk_get_thread() == spdk_thread_get_app_thread()); + execute_spdk_function(__exit_io_thread, NULL); spdk_app_stop(num_failures); } @@ -1325,12 +1336,12 @@ __run_ut_thread(void *arg) struct spdk_jsonrpc_request *request = arg; int rc = 0; struct io_target *target; - unsigned num_failures; if (CU_initialize_registry() != CUE_SUCCESS) { /* CUnit error, probably won't recover */ rc = CU_get_error(); - stop_init_thread(-rc, request); + rc = -rc; + goto ret; } target = g_io_targets; @@ -1338,16 +1349,20 @@ __run_ut_thread(void *arg) rc = __setup_ut_on_single_target(target); if (rc < 0) { /* CUnit error, probably won't recover */ - stop_init_thread(-rc, request); + rc = -rc; + goto ret; } target = target->next; } CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests(); - num_failures = CU_get_number_of_failures(); + rc = CU_get_number_of_failures(); CU_cleanup_registry(); - stop_init_thread(num_failures, request); +ret: + stop_init_thread(rc, request); + assert(spdk_get_thread() == g_thread_ut); + spdk_thread_exit(g_thread_ut); } static void