From 0f85bec52aea64abfd89616b00115c91fd2171b3 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 5 Sep 2015 19:58:29 -0400 Subject: [PATCH] Fix: consumer signal handling race MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit If a signal comes in after ctx has been destroyed, it will try to use a closed file descriptor. Signed-off-by: Mathieu Desnoyers Signed-off-by: Jérémie Galarneau --- src/bin/lttng-consumerd/lttng-consumerd.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index c75a80138..65ee16d83 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -109,7 +109,9 @@ static void sighandler(int sig) return; } - lttng_consumer_should_exit(ctx); + if (ctx) { + lttng_consumer_should_exit(ctx); + } } /* @@ -290,6 +292,7 @@ int main(int argc, char **argv) { int ret = 0; void *status; + struct lttng_consumer_local_data *tmp_ctx; /* Parse arguments */ progname = argv[0]; @@ -529,7 +532,10 @@ error: ret = EXIT_FAILURE; end: - lttng_consumer_destroy(ctx); + tmp_ctx = ctx; + ctx = NULL; + cmm_barrier(); /* Clear ctx for signal handler. */ + lttng_consumer_destroy(tmp_ctx); lttng_consumer_cleanup(); if (health_consumerd) { health_app_destroy(health_consumerd); -- 2.34.1