From: Jérémie Galarneau Date: Thu, 9 Jun 2016 20:14:28 +0000 (-0400) Subject: Fix: leak of UST app hash tables X-Git-Tag: v2.8.1~11 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=7a15c0ae9006ba4e0adeb55d78495b5610eaaec8;p=lttng-tools.git Fix: leak of UST app hash tables The ht_cleanup thread is shut down before the queue of rcu callbacks is emptied by the rcu_barrier(). Since callbacks added by call_rcu can push hash tables through the ht_cleanup pipe, we run into cases where the clean-up thread has been shutdown and hash tables pushed through the clean-up pipe are leaked. Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 625f146fa..4623579e8 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -6228,6 +6228,13 @@ exit_init_data: rcu_thread_offline(); rcu_unregister_thread(); + /* + * Ensure all prior call_rcu are done. call_rcu callbacks may push + * hash tables to the ht_cleanup thread. Therefore, we ensure that + * the queue is empty before shutting down the clean-up thread. + */ + rcu_barrier(); + ret = notify_thread_pipe(ht_cleanup_quit_pipe[1]); if (ret < 0) { ERR("write error on ht_cleanup quit pipe"); @@ -6257,9 +6264,6 @@ exit_health_sessiond_cleanup: exit_create_run_as_worker_cleanup: exit_options: - /* Ensure all prior call_rcu are done. */ - rcu_barrier(); - sessiond_cleanup_options(); exit_set_signal_handler: