[lttng-dev] [PATCH lttng-tools 1/2] Cleanup: use CMM accessors for consumer_quit variable
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Fri Jun 16 21:23:12 UTC 2017
Use CMM_LOAD_SHARED and CMM_STORE_SHARED, which are strictly
equivalent to a volatile variable, in line with the rest of the
lttng-tools project.
Also move its declaration to a header, rather than having multiple
declarations in C files, now following our coding style.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
---
src/common/consumer/consumer.c | 10 +++++-----
src/common/consumer/consumer.h | 6 ++++++
src/common/kernel-consumer/kernel-consumer.c | 1 -
src/common/ust-consumer/ust-consumer.c | 1 -
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c
index d07e5b4..9834322 100644
--- a/src/common/consumer/consumer.c
+++ b/src/common/consumer/consumer.c
@@ -76,7 +76,7 @@ int data_consumption_paused;
* Also updated by the signal handler (consumer_should_exit()). Read by the
* polling threads.
*/
-volatile int consumer_quit;
+int consumer_quit;
/*
* Global hash table containing respectively metadata and data streams. The
@@ -1227,7 +1227,7 @@ void lttng_consumer_should_exit(struct lttng_consumer_local_data *ctx)
{
ssize_t ret;
- consumer_quit = 1;
+ CMM_STORE_SHARED(consumer_quit, 1);
ret = lttng_write(ctx->consumer_should_quit[1], "4", 1);
if (ret < 1) {
PERROR("write consumer quit");
@@ -2526,7 +2526,7 @@ void *consumer_thread_data_poll(void *data)
pthread_mutex_unlock(&consumer_data.lock);
/* No FDs and consumer_quit, consumer_cleanup the thread */
- if (nb_fd == 0 && consumer_quit == 1) {
+ if (nb_fd == 0 && CMM_LOAD_SHARED(consumer_quit) == 1) {
err = 0; /* All is OK */
goto end;
}
@@ -3203,7 +3203,7 @@ void *consumer_thread_sessiond_poll(void *data)
err = 0;
goto end;
}
- if (consumer_quit) {
+ if (CMM_LOAD_SHARED(consumer_quit)) {
DBG("consumer_thread_receive_fds received quit from signal");
err = 0; /* All is OK */
goto end;
@@ -3228,7 +3228,7 @@ end:
* when all fds have hung up, the polling thread
* can exit cleanly
*/
- consumer_quit = 1;
+ CMM_STORE_SHARED(consumer_quit, 1);
/*
* Notify the data poll thread to poll back again and test the
diff --git a/src/common/consumer/consumer.h b/src/common/consumer/consumer.h
index 7375373..220dbb4 100644
--- a/src/common/consumer/consumer.h
+++ b/src/common/consumer/consumer.h
@@ -604,6 +604,12 @@ struct lttng_consumer_global_data {
struct lttng_ht *stream_per_chan_id_ht;
};
+/*
+ * Set to nonzero when the consumer is exiting. Updated by signal
+ * handler and thread exit, read by threads.
+ */
+extern int consumer_quit;
+
/* Flag used to temporarily pause data consumption from testpoints. */
extern int data_consumption_paused;
diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c
index b5afc73..8d00a0d 100644
--- a/src/common/kernel-consumer/kernel-consumer.c
+++ b/src/common/kernel-consumer/kernel-consumer.c
@@ -48,7 +48,6 @@
extern struct lttng_consumer_global_data consumer_data;
extern int consumer_poll_timeout;
-extern volatile int consumer_quit;
/*
* Take a snapshot for a specific fd
diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c
index 99803a6..4297d60 100644
--- a/src/common/ust-consumer/ust-consumer.c
+++ b/src/common/ust-consumer/ust-consumer.c
@@ -51,7 +51,6 @@
extern struct lttng_consumer_global_data consumer_data;
extern int consumer_poll_timeout;
-extern volatile int consumer_quit;
/*
* Free channel object and all streams associated with it. This MUST be used
--
2.1.4
More information about the lttng-dev
mailing list