goto exit_ht_cleanup_pipe;
}
- /* Set up max poll set size */
- if (lttng_poll_set_max_size()) {
- retval = -1;
- goto exit_set_max_size;
- }
-
/* Create thread to clean up RCU hash tables */
ret = pthread_create(&ht_cleanup_thread, NULL,
thread_ht_cleanup, (void *) NULL);
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");
retval = -1;
}
exit_ht_cleanup:
-exit_set_max_size:
utils_close_pipe(ht_cleanup_pipe);
exit_ht_cleanup_pipe:
exit_create_run_as_worker_cleanup:
exit_options:
- /* Ensure all prior call_rcu are done. */
- rcu_barrier();
-
sessiond_cleanup_options();
exit_set_signal_handler: