From 3163e21aa99479f2fdc744e94dcbc9e0fed87d2f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Wed, 27 Jun 2018 15:04:49 -0400 Subject: [PATCH] relayd: initialize the global fd tracker from fd_cap parameter MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- src/bin/lttng-relayd/Makefile.am | 1 + src/bin/lttng-relayd/lttng-relayd.h | 3 +++ src/bin/lttng-relayd/main.c | 25 +++++++++++++++++++++---- src/common/Makefile.am | 2 +- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/bin/lttng-relayd/Makefile.am b/src/bin/lttng-relayd/Makefile.am index cf56ea495..69f16636c 100644 --- a/src/bin/lttng-relayd/Makefile.am +++ b/src/bin/lttng-relayd/Makefile.am @@ -34,4 +34,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 e4e29e781..8f6a74a6d 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 @@ -50,6 +51,8 @@ extern const char * const config_section_name; 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 c09ce88b0..16b49bcaa 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -172,6 +172,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', }, @@ -536,13 +539,9 @@ exit: static void print_global_objects(void) { - rcu_register_thread(); - print_viewer_streams(); print_relay_streams(); print_sessions(); - - rcu_unregister_thread(); } /* @@ -574,6 +573,7 @@ static void relayd_cleanup(void) if (tracing_group_name_override) { free((void *) tracing_group_name); } + fd_tracker_log(the_fd_tracker); } /* @@ -4006,6 +4006,20 @@ int main(int argc, char **argv) } } + /* + * 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); if (!health_relayd) { @@ -4168,6 +4182,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 { diff --git a/src/common/Makefile.am b/src/common/Makefile.am index d78f72846..23e914692 100644 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -1,6 +1,6 @@ AUTOMAKE_OPTIONS = subdir-objects -SUBDIRS = string-utils +SUBDIRS = string-utils fd-tracker # Make sure to always distribute all folders # since SUBDIRS is decided at configure time. -- 2.34.1