From: Jérémie Galarneau Date: Wed, 27 Jun 2018 19:04:49 +0000 (-0400) Subject: Backport: relayd: initialize the global fd tracker from fd_cap parameter X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=841c095c4c8391b2b765ba5eb2647584ef658381 Backport: relayd: initialize the global fd tracker from fd_cap parameter Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-relayd/Makefile.am b/src/bin/lttng-relayd/Makefile.am index 07bc29c17..9fdadbcf5 100644 --- a/src/bin/lttng-relayd/Makefile.am +++ b/src/bin/lttng-relayd/Makefile.am @@ -31,4 +31,5 @@ lttng_relayd_LDADD = -lurcu-common -lurcu \ $(top_builddir)/src/common/health/libhealth.la \ $(top_builddir)/src/common/config/libconfig.la \ $(top_builddir)/src/common/testpoint/libtestpoint.la \ + $(top_builddir)/src/common/fd-tracker/libfd-tracker.la \ $(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la diff --git a/src/bin/lttng-relayd/lttng-relayd.h b/src/bin/lttng-relayd/lttng-relayd.h index a3976852d..ea207739c 100644 --- a/src/bin/lttng-relayd/lttng-relayd.h +++ b/src/bin/lttng-relayd/lttng-relayd.h @@ -25,6 +25,7 @@ #include #include +#include /* * Queue used to enqueue relay requests @@ -52,6 +53,8 @@ extern int opt_group_output_by_host; extern int thread_quit_pipe[2]; +extern struct fd_tracker *the_fd_tracker; + void lttng_relay_notify_ready(void); int lttng_relay_stop_threads(void); 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 {