X-Git-Url: http://git.liburcu.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=ed78b5622911cfc75517814f32a17de7a1738c4d;hp=c02f6d91e2ba904819c58f3058d83efef218c6fd;hb=76f3e2db72941aa4d234ac4aef087222d30b77b7;hpb=78435723057edf81c9adf14336a60c368790c0f6 diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index c02f6d91e..ed78b5622 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -236,6 +236,9 @@ static int app_socket_timeout; /* Set in main() with the current page size. */ long page_size; +/* If set to nonzero, spawn the consumer with valgrind. */ +static int consumer_debug_valgrind; + static void setup_consumerd_path(void) { @@ -2032,11 +2035,21 @@ static pid_t spawn_consumerd(struct consumer_data *consumer_data) break; } DBG("Using kernel consumer at: %s", consumer_to_use); - execl(consumer_to_use, - "lttng-consumerd", verbosity, "-k", - "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, - "--consumerd-err-sock", consumer_data->err_unix_sock_path, - NULL); + if (consumer_debug_valgrind) { + execl("/usr/bin/valgrind", + "valgrind", "--leak-check=full", "--show-reachable=yes", + "--tool=memcheck", "--track-fds=yes", + "--log-file=/tmp/valgrind.kconsumer.log", + consumer_to_use, verbosity, "-k", + "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, + "--consumerd-err-sock", consumer_data->err_unix_sock_path, + NULL); + } else { + execl(consumer_to_use, "lttng-consumerd", verbosity, "-k", + "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, + "--consumerd-err-sock", consumer_data->err_unix_sock_path, + NULL); + } break; case LTTNG_CONSUMER64_UST: { @@ -2071,10 +2084,21 @@ static pid_t spawn_consumerd(struct consumer_data *consumer_data) } } DBG("Using 64-bit UST consumer at: %s", consumerd64_bin); - ret = execl(consumerd64_bin, "lttng-consumerd", verbosity, "-u", - "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, - "--consumerd-err-sock", consumer_data->err_unix_sock_path, - NULL); + if (consumer_debug_valgrind) { + ret = execl("/usr/bin/valgrind", + "valgrind", "--leak-check=full", "--show-reachable=yes", + "--tool=memcheck", "--track-fds=yes", + "--log-file=/tmp/valgrind.ust64consumer.log", + consumerd64_bin, verbosity, "-u", + "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, + "--consumerd-err-sock", consumer_data->err_unix_sock_path, + NULL); + } else { + ret = execl(consumerd64_bin, "lttng-consumerd", verbosity, "-u", + "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, + "--consumerd-err-sock", consumer_data->err_unix_sock_path, + NULL); + } if (consumerd64_libdir[0] != '\0') { free(tmpnew); } @@ -2116,10 +2140,21 @@ static pid_t spawn_consumerd(struct consumer_data *consumer_data) } } DBG("Using 32-bit UST consumer at: %s", consumerd32_bin); - ret = execl(consumerd32_bin, "lttng-consumerd", verbosity, "-u", - "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, - "--consumerd-err-sock", consumer_data->err_unix_sock_path, - NULL); + if (consumer_debug_valgrind) { + ret = execl("/usr/bin/valgrind", + "valgrind", "--leak-check=full", "--show-reachable=yes", + "--tool=memcheck", "--track-fds=yes", + "--log-file=/tmp/valgrind.ust32consumer.log", + consumerd32_bin, verbosity, "-u", + "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, + "--consumerd-err-sock", consumer_data->err_unix_sock_path, + NULL); + } else { + ret = execl(consumerd32_bin, "lttng-consumerd", verbosity, "-u", + "--consumerd-cmd-sock", consumer_data->cmd_unix_sock_path, + "--consumerd-err-sock", consumer_data->err_unix_sock_path, + NULL); + } if (consumerd32_libdir[0] != '\0') { free(tmpnew); } @@ -4275,6 +4310,13 @@ int main(int argc, char **argv) } } + /* Valgrind env. variable setup. */ + if (getenv(DEFAULT_CONSUMER_DEBUG_VALGRIND_ENV)) { + consumer_debug_valgrind = 1; + /* Valgrind does not support clone(). */ + setenv("LTTNG_DEBUG_NOCLONE", "1", 1); + } + /* Create thread quit pipe */ if ((ret = init_thread_quit_pipe()) < 0) { goto error;