X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Fltt-sessiond.c;h=c3b117da304458f48973e623227fe0662d6cae65;hp=d846c89e58293016b3ffa4abb4c15b96655d8991;hb=5b8719f52eb9c8012e3bd48be778548cfbf5a8b8;hpb=e065084a507dd07b658b3d26c58b1ddd519e25a0 diff --git a/ltt-sessiond/ltt-sessiond.c b/ltt-sessiond/ltt-sessiond.c index d846c89e5..c3b117da3 100644 --- a/ltt-sessiond/ltt-sessiond.c +++ b/ltt-sessiond/ltt-sessiond.c @@ -69,8 +69,10 @@ static struct ltt_session *find_session(uuid_t); /* Variables */ const char *progname; const char *opt_tracing_group; +static int opt_sig_parent; static int opt_daemon; static int is_root; /* Set to 1 if the daemon is running as root */ +static pid_t ppid; static char apps_unix_sock_path[PATH_MAX]; /* Global application Unix socket path */ static char client_unix_sock_path[PATH_MAX]; /* Global client Unix socket path */ @@ -185,6 +187,13 @@ static void *thread_manage_clients(void *data) goto error; } + /* Notify parent pid that we are ready + * to accept command for client side. + */ + if (opt_sig_parent) { + kill(ppid, SIGCHLD); + } + while (1) { /* Blocking call, waiting for transmission */ sock = lttcomm_accept_unix_sock(client_socket); @@ -511,7 +520,8 @@ static void usage(void) "\t-a, --apps-sock PATH\t\tSpecify path for apps unix socket.\n" "\t-d, --daemonize\t\tStart as a daemon.\n" "\t-g, --group NAME\t\tSpecify the tracing group name. (default: tracing)\n" - "\t-V, --version\t\tShow version number.\n", + "\t-V, --version\t\tShow version number.\n" + "\t-S, --sig-parent\t\tSend SIGCHLD to parent pid to notify readiness.\n", progname); } @@ -526,6 +536,7 @@ static int parse_args(int argc, char **argv) { "client-sock", 1, 0, 'c' }, { "apps-sock", 1, 0, 'a' }, { "daemonize", 0, 0, 'd' }, + { "sig-parent", 0, 0, 'S' }, { "help", 0, 0, 'h' }, { "group", 1, 0, 'g' }, { "version", 0, 0, 'V' }, @@ -534,7 +545,7 @@ static int parse_args(int argc, char **argv) while (1) { int option_index = 0; - c = getopt_long(argc, argv, "dhV" "a:c:g:s:", long_options, &option_index); + c = getopt_long(argc, argv, "dhVS" "a:c:g:s:", long_options, &option_index); if (c == -1) { break; } @@ -564,6 +575,9 @@ static int parse_args(int argc, char **argv) case 'V': fprintf(stdout, "%s\n", VERSION); exit(EXIT_SUCCESS); + case 'S': + opt_sig_parent = 1; + break; default: /* Unknown option or other error. * Error is printed by getopt, just return */ @@ -874,6 +888,11 @@ int main(int argc, char **argv) goto error; } + /* Get parent pid if -S, --sig-parent is specified. */ + if (opt_sig_parent) { + ppid = getppid(); + } + while (1) { /* Create thread to manage the client socket */ ret = pthread_create(&threads[0], NULL, thread_manage_clients, (void *) NULL);