Fix: miscellaneous memory handling fixes
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index a9e6797556ec1dde54f714a64bd31f344f1c3f60..f0aaf73b064f4845974876503de4e7bf7f89f2be 100644 (file)
@@ -77,7 +77,7 @@ static int tracing_group_name_override;
 static char *opt_pidfile;
 static int opt_sig_parent;
 static int opt_verbose_consumer;
-static int opt_daemon;
+static int opt_daemon, opt_background;
 static int opt_no_kernel;
 static int is_root;                    /* Set to 1 if the daemon is running as root */
 static pid_t ppid;          /* Parent PID for --sig-parent option */
@@ -140,6 +140,7 @@ static const struct option long_options[] = {
        { "consumerd64-path", 1, 0, 't' },
        { "consumerd64-libdir", 1, 0, 'T' },
        { "daemonize", 0, 0, 'd' },
+       { "background", 0, 0, 'b' },
        { "sig-parent", 0, 0, 'S' },
        { "help", 0, 0, 'h' },
        { "group", 1, 0, 'g' },
@@ -311,7 +312,7 @@ void lttng_sessiond_notify_ready(void)
                 * Notify the parent of the fork() process that we are
                 * ready.
                 */
-               if (opt_daemon) {
+               if (opt_daemon || opt_background) {
                        kill(child_ppid, SIGUSR1);
                }
        }
@@ -1629,6 +1630,10 @@ static void *thread_dispatch_ust_registration(void *data)
 
        health_register(health_sessiond, HEALTH_SESSIOND_TYPE_APP_REG_DISPATCH);
 
+       if (testpoint(sessiond_thread_app_reg_dispatch)) {
+               goto error_testpoint;
+       }
+
        health_code_update();
 
        CDS_INIT_LIST_HEAD(&wait_queue.head);
@@ -1833,6 +1838,7 @@ error:
                free(wait_node);
        }
 
+error_testpoint:
        DBG("Dispatch thread dying");
        if (err) {
                health_error();
@@ -2021,11 +2027,6 @@ static void *thread_registration_apps(void *data)
 
 exit:
 error:
-       if (err) {
-               health_error();
-               ERR("Health error occurred in %s", __func__);
-       }
-
        /* Notify that the registration thread is gone */
        notify_ust_apps(0);
 
@@ -2050,6 +2051,10 @@ error_listen:
 error_create_poll:
 error_testpoint:
        DBG("UST Registration thread cleanup complete");
+       if (err) {
+               health_error();
+               ERR("Health error occurred in %s", __func__);
+       }
        health_unregister(health_sessiond);
 
        return NULL;
@@ -3729,7 +3734,7 @@ restart:
 
                rcu_thread_online();
 
-               reply.ret_code = 0;
+               memset(&reply, 0, sizeof(reply));
                for (i = 0; i < NR_HEALTH_SESSIOND_TYPES; i++) {
                        /*
                         * health_check_state returns 0 if health is
@@ -4039,6 +4044,7 @@ static void usage(void)
        fprintf(stderr, "      --consumerd64-path PATH     Specify path for the 64-bit UST consumer daemon binary\n");
        fprintf(stderr, "      --consumerd64-libdir PATH   Specify path for the 64-bit UST consumer daemon libraries\n");
        fprintf(stderr, "  -d, --daemonize                    Start as a daemon.\n");
+       fprintf(stderr, "  -b, --background                   Start as a daemon, keeping console open.\n");
        fprintf(stderr, "  -g, --group NAME                   Specify the tracing group name. (default: tracing)\n");
        fprintf(stderr, "  -V, --version                      Show version number.\n");
        fprintf(stderr, "  -S, --sig-parent                   Send SIGUSR1 to parent pid to notify readiness.\n");
@@ -4077,6 +4083,9 @@ static int set_option(int opt, const char *arg, const char *optname)
        case 'd':
                opt_daemon = 1;
                break;
+       case 'b':
+               opt_background = 1;
+               break;
        case 'g':
                tracing_group_name = strdup(arg);
                break;
@@ -4725,10 +4734,11 @@ int main(int argc, char **argv)
        }
 
        /* Daemonize */
-       if (opt_daemon) {
+       if (opt_daemon || opt_background) {
                int i;
 
-               ret = lttng_daemonize(&child_ppid, &recv_child_signal, 1);
+               ret = lttng_daemonize(&child_ppid, &recv_child_signal,
+                       !opt_background);
                if (ret < 0) {
                        goto error;
                }
This page took 0.025639 seconds and 4 git commands to generate.