X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Flttng.c;h=7058dd529d1ecd73e3a191f84e08b0883b54628e;hb=8db8d1dc9f11aa7995b2f77bb938f2585005413c;hp=2ee93253fe7b50f7ddfc139c58bde769465ec09c;hpb=5df0f285b2f2f9903e13cf6e48046d13a6c4c727;p=lttng-tools.git diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c index 2ee93253f..7058dd529 100644 --- a/src/bin/lttng/lttng.c +++ b/src/bin/lttng/lttng.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include #include @@ -37,6 +39,7 @@ int opt_quiet; int opt_verbose; static int opt_no_sessiond; static char *opt_sessiond_path; +static pid_t sessiond_pid; enum { OPT_SESSION_PATH, @@ -168,14 +171,23 @@ static void clean_exit(int code) */ static void sighandler(int sig) { + int status; + switch (sig) { case SIGTERM: DBG("SIGTERM caugth"); clean_exit(EXIT_FAILURE); break; case SIGCHLD: - /* Notify is done */ DBG("SIGCHLD caugth"); + waitpid(sessiond_pid, &status, 0); + /* Indicate that the session daemon died */ + sessiond_pid = 0; + ERR("Session daemon died (exit status %d)", WEXITSTATUS(status)); + break; + case SIGUSR1: + /* Notify is done */ + DBG("SIGUSR1 caugth"); break; default: DBG("Unknown signal %d caugth", sig); @@ -204,7 +216,7 @@ static int set_signal_handler(void) sa.sa_handler = sighandler; sa.sa_mask = sigset; sa.sa_flags = 0; - if ((ret = sigaction(SIGCHLD, &sa, NULL)) < 0) { + if ((ret = sigaction(SIGUSR1, &sa, NULL)) < 0) { perror("sigaction"); goto end; } @@ -214,6 +226,11 @@ static int set_signal_handler(void) goto end; } + if ((ret = sigaction(SIGCHLD, &sa, NULL)) < 0) { + perror("sigaction"); + goto end; + } + end: return ret; } @@ -296,8 +313,12 @@ static int spawn_sessiond(char *pathname) kill(getppid(), SIGTERM); /* unpause parent */ exit(EXIT_FAILURE); } else if (pid > 0) { + sessiond_pid = pid; /* Wait for lttng-sessiond to start */ pause(); + if (!sessiond_pid) { + exit(EXIT_FAILURE); + } goto end; } else { perror("fork");