X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-consumerd%2Flttng-consumerd.c;h=2f8eed1085dfed209ba5f00979621e2f603d44be;hb=fe19a07a543415355ad6ab04e6fe72f167a48262;hp=1373a74b28212d5595d8c4f0dc18a89938e6a616;hpb=0072e5e28fb5f18daffb930be7efd55d2474e6ad;p=lttng-tools.git diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index 1373a74b2..2f8eed108 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -308,6 +308,8 @@ int main(int argc, char **argv) void *status; struct lttng_consumer_local_data *tmp_ctx; + rcu_register_thread(); + if (set_signal_handler()) { retval = -1; goto exit_set_signal_handler; @@ -622,6 +624,12 @@ exit_init_data: tmp_ctx = ctx; ctx = NULL; cmm_barrier(); /* Clear ctx for signal handler. */ + /* + * Wait for all pending call_rcu work to complete before tearing + * down data structures. call_rcu worker may be trying to + * perform lookups in those structures. + */ + rcu_barrier(); lttng_consumer_destroy(tmp_ctx); lttng_consumer_cleanup(); @@ -637,6 +645,8 @@ exit_health_consumerd_cleanup: exit_options: exit_set_signal_handler: + rcu_unregister_thread(); + if (!retval) { exit(EXIT_SUCCESS); } else {