X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=ed78b5622911cfc75517814f32a17de7a1738c4d;hb=refs%2Fheads%2Fvalgrind;hp=3b27c6f36fee19ca345add26ba6f427c2a253f27;hpb=6dc3064a30b0cc7cfa9fdd22da1963525dfb7388;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 3b27c6f36..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) { @@ -646,7 +649,8 @@ static int update_kernel_stream(struct consumer_data *consumer_data, int fd) pthread_mutex_lock(socket->lock); ret = kernel_consumer_send_channel_stream(socket, - channel, ksess); + channel, ksess, + session->output_traces ? 1 : 0); pthread_mutex_unlock(socket->lock); if (ret < 0) { rcu_read_unlock(); @@ -2031,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: { @@ -2070,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); } @@ -2115,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); } @@ -2377,7 +2413,7 @@ static int create_ust_session(struct ltt_session *session, lus->uid = session->uid; lus->gid = session->gid; - + lus->output_traces = session->output_traces; session->ust_session = lus; /* Copy session output to the newly created UST session */ @@ -2434,6 +2470,7 @@ static int create_kernel_session(struct ltt_session *session) session->kernel_session->uid = session->uid; session->kernel_session->gid = session->gid; + session->kernel_session->output_traces = session->output_traces; return LTTNG_OK; @@ -4273,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;