relayd: initialize the global fd tracker from fd_cap parameter
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 27 Jun 2018 19:04:49 +0000 (15:04 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 3 Jul 2018 14:40:58 +0000 (10:40 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-relayd/Makefile.am
src/bin/lttng-relayd/lttng-relayd.h
src/bin/lttng-relayd/main.c
src/common/Makefile.am

index cf56ea4953c2377469aa6412015ef5e71e16ead4..69f16636cf838fa4d0d65024866770d45ef323dd 100644 (file)
@@ -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
index e4e29e781e3ed8233cfdb6c82ddbe7ee32618038..8f6a74a6ddfdc8abc89de1ef18a15ebececc293d 100644 (file)
@@ -25,6 +25,7 @@
 #include <urcu/wfcqueue.h>
 
 #include <common/hashtable/hashtable.h>
+#include <common/fd-tracker/fd-tracker.h>
 
 /*
  * 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);
 
index c09ce88b06dcc2e8b8e5797cb8c1735c4efb358b..16b49bcaa9a398e4fe00855ca7f7bb0439c97881 100644 (file)
@@ -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 {
index d78f72846387e9a9344de0301868b4f735375d58..23e91469209c7c205f6b62f690d2ed9ac1725d56 100644 (file)
@@ -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.
This page took 0.030574 seconds and 5 git commands to generate.