server: create sk_out_key earlier
authorJens Axboe <axboe@fb.com>
Mon, 14 Dec 2015 21:46:32 +0000 (14:46 -0700)
committerJens Axboe <axboe@fb.com>
Mon, 14 Dec 2015 21:46:32 +0000 (14:46 -0700)
The previous code worked on Linux, since we seem to get '0' as
the key always. It segfaults on other platforms, since we
call pthread_getspecific() before the key has been created.

Signed-off-by: Jens Axboe <axboe@fb.com>
server.c

index 6d96a66fa30262022851e6e14847a9fd013c735f..27ff2854be4bac9045b884f9db365bb061229db3 100644 (file)
--- a/server.c
+++ b/server.c
@@ -2084,6 +2084,13 @@ static int fio_server(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;
+       }
+
+       pthread_setspecific(sk_out_key, NULL);
+
        dprint(FD_NET, "starting server\n");
 
        if (fio_handle_server_arg())
@@ -2095,9 +2102,6 @@ static int fio_server(void)
 
        set_sig_handlers();
 
-       if (pthread_key_create(&sk_out_key, NULL))
-               log_err("fio: can't create sk_out backend key\n");
-
        ret = accept_loop(sk);
 
        close(sk);