Standardize quit pipes behavior
[lttng-tools.git] / src / bin / lttng-sessiond / manage-consumer.cpp
index d7df6ce8fac9959fe1242f1812364e8bacf4360b..d9d1e670ec87e2da1f356c4dc2930db6005a1c83 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 EfficiOS Inc.
  * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
@@ -9,22 +9,24 @@
 
 #include <signal.h>
 
-#include <common/pipe.h>
-#include <common/utils.h>
+#include <common/pipe.hpp>
+#include <common/utils.hpp>
 
-#include "manage-consumer.h"
-#include "testpoint.h"
-#include "health-sessiond.h"
-#include "utils.h"
-#include "thread.h"
-#include "ust-consumer.h"
+#include "manage-consumer.hpp"
+#include "testpoint.hpp"
+#include "health-sessiond.hpp"
+#include "utils.hpp"
+#include "thread.hpp"
+#include "ust-consumer.hpp"
 
+namespace {
 struct thread_notifiers {
        struct lttng_pipe *quit_pipe;
        struct consumer_data *consumer_data;
        sem_t ready;
        int initialization_result;
 };
+} /* namespace */
 
 static void mark_thread_as_ready(struct thread_notifiers *notifiers)
 {
@@ -53,13 +55,13 @@ static void wait_until_thread_is_ready(struct thread_notifiers *notifiers)
  */
 static void *thread_consumer_management(void *data)
 {
-       int sock = -1, i, ret, pollfd, err = -1, should_quit = 0;
-       uint32_t revents, nb_fd;
+       int sock = -1, i, ret, err = -1, should_quit = 0;
+       uint32_t nb_fd;
        enum lttcomm_return_code code;
        struct lttng_poll_event events;
        struct thread_notifiers *notifiers = (thread_notifiers *) data;
        struct consumer_data *consumer_data = notifiers->consumer_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);
        struct consumer_socket *cmd_socket_wrapper = NULL;
 
        DBG("[thread] Manage consumer started");
@@ -81,7 +83,7 @@ static void *thread_consumer_management(void *data)
                goto error_poll;
        }
 
-       ret = lttng_poll_add(&events, quit_pipe_read_fd, LPOLLIN | LPOLLERR);
+       ret = lttng_poll_add(&events, thread_quit_pipe_fd, LPOLLIN | LPOLLERR);
        if (ret < 0) {
                mark_thread_intialization_as_failed(notifiers);
                goto error;
@@ -119,13 +121,14 @@ static void *thread_consumer_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();
 
-               /* Thread quit pipe has been closed. Killing thread. */
-               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;
                        mark_thread_intialization_as_failed(notifiers);
                        goto exit;
@@ -193,7 +196,7 @@ static void *thread_consumer_management(void *data)
        consumer_data->metadata_sock.fd_ptr = &consumer_data->metadata_fd;
 
        /* Create metadata socket lock. */
-       consumer_data->metadata_sock.lock = (pthread_mutex_t *) zmalloc(sizeof(pthread_mutex_t));
+       consumer_data->metadata_sock.lock = zmalloc<pthread_mutex_t>();
        if (consumer_data->metadata_sock.lock == NULL) {
                PERROR("zmalloc pthread mutex");
                mark_thread_intialization_as_failed(notifiers);
@@ -288,8 +291,8 @@ static void *thread_consumer_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();
 
@@ -298,7 +301,7 @@ static void *thread_consumer_management(void *data)
                         * but continue the current loop to handle potential data from
                         * consumer.
                         */
-                       if (pollfd == quit_pipe_read_fd) {
+                       if (pollfd == thread_quit_pipe_fd) {
                                should_quit = 1;
                        } else if (pollfd == sock) {
                                /* Event on the consumerd socket */
@@ -437,7 +440,7 @@ bool launch_consumer_management_thread(struct consumer_data *consumer_data)
        struct thread_notifiers *notifiers = NULL;
        struct lttng_thread *thread;
 
-       notifiers = (thread_notifiers *) zmalloc(sizeof(*notifiers));
+       notifiers = zmalloc<thread_notifiers>();
        if (!notifiers) {
                goto error_alloc;
        }
This page took 0.025411 seconds and 4 git commands to generate.