X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmanage-apps.cpp;h=8e7f50900bc32bbdf66816f132d89ebad775ff82;hb=28ab034a2c3582d07d3423d2d746731f87d3969f;hp=cff56cbadfe03a9c963bb063836d4b947b800051;hpb=7966af5763c4aaca39df9bbfa9277ff15715c720;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/manage-apps.cpp b/src/bin/lttng-sessiond/manage-apps.cpp index cff56cbad..8e7f50900 100644 --- a/src/bin/lttng-sessiond/manage-apps.cpp +++ b/src/bin/lttng-sessiond/manage-apps.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 David Goulet + * Copyright (C) 2011 EfficiOS Inc. * Copyright (C) 2011 Mathieu Desnoyers * Copyright (C) 2013 Jérémie Galarneau * @@ -7,16 +7,18 @@ * */ -#include "manage-apps.h" -#include "testpoint.h" -#include "health-sessiond.h" -#include "utils.h" -#include "thread.h" +#include "health-sessiond.hpp" +#include "manage-apps.hpp" +#include "testpoint.hpp" +#include "thread.hpp" +#include "utils.hpp" +namespace { struct thread_notifiers { struct lttng_pipe *quit_pipe; int apps_cmd_pipe_read_fd; }; +} /* namespace */ static void cleanup_application_management_thread(void *data) { @@ -41,13 +43,12 @@ static void cleanup_application_management_thread(void *data) */ static void *thread_application_management(void *data) { - int i, ret, pollfd, err = -1; + int i, ret, err = -1; ssize_t size_ret; - uint32_t revents, nb_fd; + uint32_t nb_fd; struct lttng_poll_event events; struct thread_notifiers *notifiers = (thread_notifiers *) data; - const int quit_pipe_read_fd = lttng_pipe_get_readfd( - notifiers->quit_pipe); + const auto thread_quit_pipe_fd = lttng_pipe_get_readfd(notifiers->quit_pipe); DBG("[thread] Manage application started"); @@ -67,13 +68,12 @@ static void *thread_application_management(void *data) goto error_poll_create; } - ret = lttng_poll_add(&events, notifiers->apps_cmd_pipe_read_fd, - LPOLLIN | LPOLLRDHUP); + ret = lttng_poll_add(&events, notifiers->apps_cmd_pipe_read_fd, LPOLLIN | LPOLLRDHUP); if (ret < 0) { goto error; } - ret = lttng_poll_add(&events, quit_pipe_read_fd, LPOLLIN | LPOLLERR); + ret = lttng_poll_add(&events, thread_quit_pipe_fd, LPOLLIN); if (ret < 0) { goto error; } @@ -91,8 +91,7 @@ static void *thread_application_management(void *data) restart: health_poll_entry(); ret = lttng_poll_wait(&events, -1); - DBG("Apps thread return from poll on %d fds", - LTTNG_POLL_GETNB(&events)); + DBG("Apps thread return from poll on %d fds", LTTNG_POLL_GETNB(&events)); health_poll_exit(); if (ret < 0) { /* @@ -108,23 +107,27 @@ static void *thread_application_management(void *data) for (i = 0; i < nb_fd; i++) { /* Fetch once the poll data */ - revents = LTTNG_POLL_GETEV(&events, i); - pollfd = LTTNG_POLL_GETFD(&events, i); + const auto revents = LTTNG_POLL_GETEV(&events, i); + const auto pollfd = LTTNG_POLL_GETFD(&events, i); health_code_update(); - if (pollfd == quit_pipe_read_fd) { + /* Activity on thread quit pipe, exiting. */ + if (pollfd == thread_quit_pipe_fd) { + DBG("Activity on thread quit pipe"); err = 0; goto exit; - } else if (pollfd == notifiers->apps_cmd_pipe_read_fd) { + } + + if (pollfd == notifiers->apps_cmd_pipe_read_fd) { /* Inspect the apps cmd pipe */ if (revents & LPOLLIN) { int sock; /* Empty pipe */ - size_ret = lttng_read( - notifiers->apps_cmd_pipe_read_fd, - &sock, sizeof(sock)); + size_ret = lttng_read(notifiers->apps_cmd_pipe_read_fd, + &sock, + sizeof(sock)); if (size_ret < sizeof(sock)) { PERROR("read apps cmd pipe"); goto error; @@ -136,8 +139,7 @@ static void *thread_application_management(void *data) * Since this is a command socket (write then read), * we only monitor the error events of the socket. */ - ret = lttng_poll_add(&events, sock, - LPOLLERR | LPOLLHUP | LPOLLRDHUP); + ret = lttng_poll_add(&events, sock, LPOLLRDHUP); if (ret < 0) { goto error; } @@ -165,7 +167,9 @@ static void *thread_application_management(void *data) /* Socket closed on remote end. */ ust_app_unregister(pollfd); } else { - ERR("Unexpected poll events %u for sock %d", revents, pollfd); + ERR("Unexpected poll events %u for sock %d", + revents, + pollfd); goto error; } } @@ -211,7 +215,7 @@ bool launch_application_management_thread(int apps_cmd_pipe_read_fd) struct thread_notifiers *notifiers = NULL; struct lttng_thread *thread; - notifiers = (thread_notifiers *) zmalloc(sizeof(*notifiers)); + notifiers = zmalloc(); if (!notifiers) { goto error_alloc; } @@ -223,10 +227,10 @@ bool launch_application_management_thread(int apps_cmd_pipe_read_fd) notifiers->apps_cmd_pipe_read_fd = apps_cmd_pipe_read_fd; thread = lttng_thread_create("UST application management", - thread_application_management, - shutdown_application_management_thread, - cleanup_application_management_thread, - notifiers); + thread_application_management, + shutdown_application_management_thread, + cleanup_application_management_thread, + notifiers); if (!thread) { goto error; }