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 bd3e260b40cfd575030c3276e247f8f4f28ec0f0..44354e289ee873dc52eeffca2385ee76a1d5db85 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
 
 #error "No available clock source!"
 #endif
 
+       if (fio_server_create_sk_key())
+               goto done;
+
        if (parse_options(argc, argv))
                goto done;
 
        if (parse_options(argc, argv))
                goto done;
 
index eccd9d37e80f9b48026c9d5435111c84c55e15ca..120400f919e5fd08988b09466d9f1f5025e318aa 100644 (file)
--- a/server.c
+++ b/server.c
@@ -2186,16 +2186,20 @@ static void set_sig_handlers(void)
        sigaction(SIGINT, &act, NULL);
 }
 
        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");
        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);
        }
 
        pthread_setspecific(sk_out_key, NULL);
+       return 0;
+}
+
+static int fio_server(void)
+{
+       int sk, ret;
 
        dprint(FD_NET, "starting server\n");
 
 
        dprint(FD_NET, "starting server\n");
 
index 9205ae6574a9d1220aa2f7d9c48d25cd65348ea6..0e60750f8d0a6c847056be333229ab4c47b9840d 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 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;
 
 extern int exit_backend;
 extern int fio_net_port;