Always create server sk_out key
authorJens Axboe <axboe@fb.com>
Wed, 13 Jan 2016 16:34:46 +0000 (09:34 -0700)
committerJens Axboe <axboe@fb.com>
Wed, 13 Jan 2016 16:38:40 +0000 (09:38 -0700)
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 <j.rosenboom@x-ion.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
fio.c
server.c
server.h

diff --git a/fio.c b/fio.c
index bd3e260..44354e2 100644 (file)
--- 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;
 
index eccd9d3..120400f 100644 (file)
--- 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");
 
index 9205ae6..0e60750 100644 (file)
--- 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;