X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-consumerd%2Fhealth-consumerd.cpp;h=fc4988d682e149f2ad5d774f2b683ff0627885a2;hb=28ab034a2c3582d07d3423d2d746731f87d3969f;hp=fe2f6d22c5d43192440120f04368bac06ef079bb;hpb=1970828049d051d5cb485dfab995081b4550fd2a;p=lttng-tools.git diff --git a/src/bin/lttng-consumerd/health-consumerd.cpp b/src/bin/lttng-consumerd/health-consumerd.cpp index fe2f6d22c..fc4988d68 100644 --- a/src/bin/lttng-consumerd/health-consumerd.cpp +++ b/src/bin/lttng-consumerd/health-consumerd.cpp @@ -6,59 +6,44 @@ */ #define _LGPL_SOURCE +#include "health-consumerd.hpp" +#include "lttng-consumerd.hpp" + +#include +#include +#include +#include +#include +#include +#include + #include #include #include +#include #include +#include #include #include #include #include #include #include +#include #include #include #include #include #include -#include -#include +#include #include -#include #include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "lttng-consumerd.h" -#include "health-consumerd.h" +#include /* Global health check unix path */ static char health_unix_sock_path[PATH_MAX]; -int health_quit_pipe[2]; - -/* - * Check if the thread quit pipe was triggered. - * - * Return 1 if it was triggered else 0; - */ -static -int check_health_quit_pipe(int fd, uint32_t events) -{ - if (fd == health_quit_pipe[0] && (events & LPOLLIN)) { - return 1; - } - - return 0; -} +int health_quit_pipe[2] = { -1, -1 }; /* * Send data on a unix socket using the liblttsessiondcomm API. @@ -75,8 +60,7 @@ static int send_unix_sock(int sock, void *buf, size_t len) return lttcomm_send_unix_sock(sock, buf, len); } -static -int setup_health_path(void) +static int setup_health_path(void) { int is_root, ret = 0; enum lttng_consumer_type type; @@ -91,16 +75,19 @@ int setup_health_path(void) } switch (type) { case LTTNG_CONSUMER_KERNEL: - snprintf(health_unix_sock_path, sizeof(health_unix_sock_path), - DEFAULT_GLOBAL_KCONSUMER_HEALTH_UNIX_SOCK); + snprintf(health_unix_sock_path, + sizeof(health_unix_sock_path), + DEFAULT_GLOBAL_KCONSUMER_HEALTH_UNIX_SOCK); break; case LTTNG_CONSUMER64_UST: - snprintf(health_unix_sock_path, sizeof(health_unix_sock_path), - DEFAULT_GLOBAL_USTCONSUMER64_HEALTH_UNIX_SOCK); + snprintf(health_unix_sock_path, + sizeof(health_unix_sock_path), + DEFAULT_GLOBAL_USTCONSUMER64_HEALTH_UNIX_SOCK); break; case LTTNG_CONSUMER32_UST: - snprintf(health_unix_sock_path, sizeof(health_unix_sock_path), - DEFAULT_GLOBAL_USTCONSUMER32_HEALTH_UNIX_SOCK); + snprintf(health_unix_sock_path, + sizeof(health_unix_sock_path), + DEFAULT_GLOBAL_USTCONSUMER32_HEALTH_UNIX_SOCK); break; default: ret = -EINVAL; @@ -121,16 +108,22 @@ int setup_health_path(void) } switch (type) { case LTTNG_CONSUMER_KERNEL: - snprintf(health_unix_sock_path, sizeof(health_unix_sock_path), - DEFAULT_HOME_KCONSUMER_HEALTH_UNIX_SOCK, home_path); + snprintf(health_unix_sock_path, + sizeof(health_unix_sock_path), + DEFAULT_HOME_KCONSUMER_HEALTH_UNIX_SOCK, + home_path); break; case LTTNG_CONSUMER64_UST: - snprintf(health_unix_sock_path, sizeof(health_unix_sock_path), - DEFAULT_HOME_USTCONSUMER64_HEALTH_UNIX_SOCK, home_path); + snprintf(health_unix_sock_path, + sizeof(health_unix_sock_path), + DEFAULT_HOME_USTCONSUMER64_HEALTH_UNIX_SOCK, + home_path); break; case LTTNG_CONSUMER32_UST: - snprintf(health_unix_sock_path, sizeof(health_unix_sock_path), - DEFAULT_HOME_USTCONSUMER32_HEALTH_UNIX_SOCK, home_path); + snprintf(health_unix_sock_path, + sizeof(health_unix_sock_path), + DEFAULT_HOME_USTCONSUMER32_HEALTH_UNIX_SOCK, + home_path); break; default: ret = -EINVAL; @@ -144,10 +137,10 @@ end: /* * Thread managing health check socket. */ -void *thread_manage_health_consumerd(void *data) +void *thread_manage_health_consumerd(void *data __attribute__((unused))) { - int sock = -1, new_sock = -1, ret, i, pollfd, err = -1; - uint32_t revents, nb_fd; + int sock = -1, new_sock = -1, ret, i, err = -1; + uint32_t nb_fd; struct lttng_poll_event events; struct health_comm_msg msg; struct health_comm_reply reply; @@ -189,8 +182,7 @@ void *thread_manage_health_consumerd(void *data) goto error; } - ret = chmod(health_unix_sock_path, - S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); + ret = chmod(health_unix_sock_path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); if (ret < 0) { ERR("Unable to set permissions on %s", health_unix_sock_path); PERROR("chmod"); @@ -236,7 +228,7 @@ void *thread_manage_health_consumerd(void *data) DBG("Health check ready"); /* Inifinite blocking call, waiting for transmission */ -restart: + restart: ret = lttng_poll_wait(&events, -1); if (ret < 0) { /* @@ -252,20 +244,20 @@ restart: 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); - /* Thread quit pipe has been closed. Killing thread. */ - ret = check_health_quit_pipe(pollfd, revents); - if (ret) { + /* Activity on health quit pipe, exiting. */ + if (pollfd == health_quit_pipe[0]) { + DBG("Activity on health quit pipe"); err = 0; goto exit; } /* Event on the registration socket */ if (pollfd == sock) { - if (revents & (LPOLLERR | LPOLLHUP | LPOLLRDHUP) - && !(revents & LPOLLIN)) { + if (revents & (LPOLLERR | LPOLLHUP | LPOLLRDHUP) && + !(revents & LPOLLIN)) { ERR("Health socket poll error"); goto error; } @@ -284,7 +276,7 @@ restart: (void) utils_set_fd_cloexec(new_sock); DBG("Receiving data from client for health..."); - ret = lttcomm_recv_unix_sock(new_sock, (void *)&msg, sizeof(msg)); + ret = lttcomm_recv_unix_sock(new_sock, (void *) &msg, sizeof(msg)); if (ret <= 0) { DBG("Nothing recv() from client... continuing"); ret = close(new_sock);