From 3d80c73563621286cf21284dd521629ce67af934 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 13 Jan 2016 09:34:46 -0700 Subject: [PATCH] Always create server sk_out key We use it from helper threads, so let's just unconditionally set it up. This fixes a problem on fio exit with libraries or engines that also create pthread keys. Reported-by: Jens Rosenboom Signed-off-by: Jens Axboe --- fio.c | 3 +++ server.c | 12 ++++++++---- server.h | 2 ++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/fio.c b/fio.c index bd3e260b..44354e28 100644 --- a/fio.c +++ b/fio.c @@ -39,6 +39,9 @@ int main(int argc, char *argv[], char *envp[]) #error "No available clock source!" #endif + if (fio_server_create_sk_key()) + goto done; + if (parse_options(argc, argv)) goto done; diff --git a/server.c b/server.c index eccd9d37..120400f9 100644 --- a/server.c +++ b/server.c @@ -2186,16 +2186,20 @@ static void set_sig_handlers(void) sigaction(SIGINT, &act, NULL); } -static int fio_server(void) +int fio_server_create_sk_key(void) { - int sk, ret; - if (pthread_key_create(&sk_out_key, NULL)) { log_err("fio: can't create sk_out backend key\n"); - return -1; + return 1; } pthread_setspecific(sk_out_key, NULL); + return 0; +} + +static int fio_server(void) +{ + int sk, ret; dprint(FD_NET, "starting server\n"); diff --git a/server.h b/server.h index 9205ae65..0e60750f 100644 --- a/server.h +++ b/server.h @@ -220,6 +220,8 @@ extern void fio_server_send_add_job(struct thread_data *); extern void fio_server_send_start(struct thread_data *); extern int fio_net_send_quit(int sk); +extern int fio_server_create_sk_key(void); + extern int exit_backend; extern int fio_net_port; -- 2.25.1