X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fmain.c;h=72ecef2f2e49901c2392d0f658b50832b2e420d6;hb=841c095c4c8391b2b765ba5eb2647584ef658381;hp=7cb0140c6e40205cdb33cda92fc65016ecffc84d;hpb=a2cc5ee8e8caf1e77cae0d5e25fde03dc20fe199;p=deliverable%2Flttng-tools.git diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 7cb0140c6..72ecef2f2 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -165,6 +165,9 @@ struct lttng_ht *sessions_ht; /* Relayd health monitoring */ struct health_app *health_relayd; +/* Global fd tracker. */ +struct fd_tracker *the_fd_tracker; + static struct option long_options[] = { { "control-port", 1, 0, 'C', }, { "data-port", 1, 0, 'D', }, @@ -592,13 +595,9 @@ exit: static void print_global_objects(void) { - rcu_register_thread(); - print_viewer_streams(); print_relay_streams(); print_sessions(); - - rcu_unregister_thread(); } /* @@ -630,6 +629,7 @@ static void relayd_cleanup(void) if (tracing_group_name_override) { free((void *) tracing_group_name); } + fd_tracker_log(the_fd_tracker); } /* @@ -3314,7 +3314,6 @@ int main(int argc, char **argv) } } - if (opt_working_directory) { ret = utils_change_working_dir(opt_working_directory); if (ret) { @@ -3322,6 +3321,19 @@ int main(int argc, char **argv) goto exit_options; } } + /* + * The RCU thread registration (and use, through the fd-tracker's + * creation) is done after the daemonization to allow us to not + * deal with liburcu's fork() management as the call RCU needs to + * be restored. + */ + rcu_register_thread(); + + the_fd_tracker = fd_tracker_create(lttng_opt_fd_cap); + if (!the_fd_tracker) { + retval = -1; + goto exit_options; + } /* Initialize thread health monitoring */ health_relayd = health_app_create(NR_HEALTH_RELAYD_TYPES); @@ -3485,6 +3497,9 @@ exit_options: /* Ensure all prior call_rcu are done. */ rcu_barrier(); + fd_tracker_destroy(the_fd_tracker); + rcu_unregister_thread(); + if (!retval) { exit(EXIT_SUCCESS); } else {