sessiond: kernel triggers: add infrastructure to create event notifiers
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 55e0ad3d7a28623cb6f1bdad7ccc04e289f410f8..e646a6de5742df1998c38bf794aa68012293f011 100644 (file)
@@ -657,7 +657,7 @@ static int set_option(int opt, const char *arg, const char *optname)
                        WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
                                "-l, --load");
                } else {
-                       config_string_set(&config.load_session_path, strdup(arg));
+                       config_string_set(&config.load_session_path, strdup(arg));
                        if (!config.load_session_path.value) {
                                PERROR("strdup");
                                ret = -ENOMEM;
@@ -869,7 +869,7 @@ end:
  */
 static int create_lockfile(void)
 {
-        return utils_create_lock_file(config.lock_file_path.value);
+       return utils_create_lock_file(config.lock_file_path.value);
 }
 
 /*
@@ -1183,7 +1183,7 @@ static void set_ulimit(void)
 
 static int write_pidfile(void)
 {
-        return utils_create_pid_file(getpid(), config.pid_file_path.value);
+       return utils_create_pid_file(getpid(), config.pid_file_path.value);
 }
 
 static int set_clock_plugin_env(void)
@@ -1195,7 +1195,7 @@ static int set_clock_plugin_env(void)
                goto end;
        }
 
-        ret = asprintf(&env_value, "LTTNG_UST_CLOCK_PLUGIN=%s",
+       ret = asprintf(&env_value, "LTTNG_UST_CLOCK_PLUGIN=%s",
                        config.lttng_ust_clock_plugin.value);
        if (ret < 0) {
                PERROR("asprintf");
@@ -1302,6 +1302,7 @@ int main(int argc, char **argv)
        struct lttng_thread *notification_thread = NULL;
        struct lttng_thread *register_apps_thread = NULL;
 
+       logger_set_thread_name("Main", false);
        init_kernel_workarounds();
 
        rcu_register_thread();
@@ -1725,6 +1726,18 @@ int main(int argc, char **argv)
                        retval = -1;
                        goto stop_threads;
                }
+
+               if (kernel_get_notification_fd() >= 0) {
+                       ret = notification_thread_command_add_tracer_event_source(
+                                       notification_thread_handle,
+                                       kernel_get_notification_fd(),
+                                       LTTNG_DOMAIN_KERNEL);
+                       if (ret != LTTNG_OK) {
+                               ERR("Failed to add kernel trigger event source to notification thread");
+                               retval = -1;
+                               goto stop_threads;
+                       }
+               }
        }
 
        /* Load sessions. */
@@ -1778,6 +1791,13 @@ stop_threads:
        rcu_thread_online();
        sessiond_cleanup();
 
+       /*
+        * Wait for all pending call_rcu work to complete tearing shutting down
+        * the notification thread. This call_rcu work includes shutting down
+        * UST apps and event notifier pipes.
+        */
+       rcu_barrier();
+
        if (notification_thread) {
                lttng_thread_shutdown(notification_thread);
                lttng_thread_put(notification_thread);
This page took 0.024571 seconds and 4 git commands to generate.