From 483520322ac163a14df085082225b5c6b337ce6d Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Tue, 25 Apr 2023 15:13:30 +0200 Subject: [PATCH] accel_perf: add shutdown callback Otherwise, it's impossible to stop the app before its run time expires, because the accel library waits until its IO channels are released which would only happen at the end. Signed-off-by: Konrad Sztyber Change-Id: I7438b474f4f6d6bcb4bf6aad02ccae9f511f1b51 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17768 Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker --- examples/accel/perf/accel_perf.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/examples/accel/perf/accel_perf.c b/examples/accel/perf/accel_perf.c index e00eaa977..1582e9c15 100644 --- a/examples/accel/perf/accel_perf.c +++ b/examples/accel/perf/accel_perf.c @@ -1115,6 +1115,26 @@ error_end: spdk_app_stop(rc); } +static void +worker_shutdown(void *ctx) +{ + _worker_stop(ctx); +} + +static void +shutdown_cb(void) +{ + struct worker_thread *worker; + + pthread_mutex_lock(&g_workers_lock); + worker = g_workers; + while (worker) { + spdk_thread_send_msg(worker->thread, worker_shutdown, worker); + worker = worker->next; + } + pthread_mutex_unlock(&g_workers_lock); +} + int main(int argc, char **argv) { @@ -1124,6 +1144,7 @@ main(int argc, char **argv) spdk_app_opts_init(&g_opts, sizeof(g_opts)); g_opts.name = "accel_perf"; g_opts.reactor_mask = "0x1"; + g_opts.shutdown_cb = shutdown_cb; if (spdk_app_parse_args(argc, argv, &g_opts, "a:C:o:q:t:yw:P:f:T:l:x:", NULL, parse_args, usage) != SPDK_APP_PARSE_ARGS_SUCCESS) { g_rc = -1;