From: Mathieu Desnoyers Date: Mon, 23 Jul 2012 15:31:34 +0000 (-0400) Subject: Fix: relayd and sessiond: dispatch thread exit is shared across threads X-Git-Tag: v2.1.0-rc1~61 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=26c9d55e1367d3aff6e501b5a1295edd1ccbc210;p=lttng-tools.git Fix: relayd and sessiond: dispatch thread exit is shared across threads Signed-off-by: Mathieu Desnoyers --- diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 0428d33ce..81f10b783 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -74,6 +74,7 @@ static int thread_quit_pipe[2] = { -1, -1 }; */ static int relay_cmd_pipe[2] = { -1, -1 }; +/* Shared between threads */ static int dispatch_thread_exit; static pthread_t listener_thread; @@ -272,7 +273,7 @@ void stop_threads(void) } /* Dispatch thread */ - dispatch_thread_exit = 1; + CMM_STORE_SHARED(dispatch_thread_exit, 1); futex_nto1_wake(&relay_cmd_queue.futex); } @@ -608,7 +609,7 @@ void *relay_thread_dispatcher(void *data) DBG("[thread] Relay dispatcher started"); - while (!dispatch_thread_exit) { + while (!CMM_LOAD_SHARED(dispatch_thread_exit)) { /* Atomically prepare the queue futex */ futex_nto1_prepare(&relay_cmd_queue.futex); diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 85b960ee3..5664b0be1 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -103,6 +103,7 @@ static struct consumer_data ustconsumer32_data = { .cmd_sock = -1, }; +/* Shared between threads */ static int dispatch_thread_exit; /* Global application Unix socket path */ @@ -420,7 +421,7 @@ static void stop_threads(void) } /* Dispatch thread */ - dispatch_thread_exit = 1; + CMM_STORE_SHARED(dispatch_thread_exit, 1); futex_nto1_wake(&ust_cmd_queue.futex); } @@ -1219,7 +1220,7 @@ static void *thread_dispatch_ust_registration(void *data) DBG("[thread] Dispatch UST command started"); - while (!dispatch_thread_exit) { + while (!CMM_LOAD_SHARED(dispatch_thread_exit)) { /* Atomically prepare the queue futex */ futex_nto1_prepare(&ust_cmd_queue.futex);