projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: consumer signal handling race
[lttng-tools.git]
/
src
/
bin
/
lttng-consumerd
/
lttng-consumerd.c
diff --git
a/src/bin/lttng-consumerd/lttng-consumerd.c
b/src/bin/lttng-consumerd/lttng-consumerd.c
index 764cf4cb0f59ff981629c99078b31676d0f700b2..0d34feeb342904ddc599c84fbc7c7359ade16872 100644
(file)
--- 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;
}
return;
}
- lttng_consumer_should_exit(ctx);
+ if (ctx) {
+ lttng_consumer_should_exit(ctx);
+ }
}
/*
}
/*
@@
-312,6
+314,7
@@
int main(int argc, char **argv)
{
int ret = 0, retval = 0;
void *status;
{
int ret = 0, retval = 0;
void *status;
+ struct lttng_consumer_local_data *tmp_ctx;
if (set_signal_handler()) {
retval = -1;
if (set_signal_handler()) {
retval = -1;
@@
-626,7
+629,10
@@
exit_health_thread:
exit_health_pipe:
exit_init_data:
exit_health_pipe:
exit_init_data:
- 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) {
lttng_consumer_cleanup();
if (health_consumerd) {
This page took
0.023886 seconds
and
4
git commands to generate.