Clean-up: modernize pretty_xml.cpp
[lttng-tools.git] / src / bin / lttng-sessiond / session.cpp
index 1846024fcc60670d505a740db81125c7ec1e0aec..0ad891e3252e4e294aaf23026abac9a394080117 100644 (file)
@@ -6,6 +6,22 @@
  */
 
 #define _LGPL_SOURCE
+#include "cmd.hpp"
+#include "kernel.hpp"
+#include "lttng-sessiond.hpp"
+#include "session.hpp"
+#include "timer.hpp"
+#include "trace-ust.hpp"
+#include "utils.hpp"
+
+#include <common/common.hpp>
+#include <common/sessiond-comm/sessiond-comm.hpp>
+#include <common/trace-chunk.hpp>
+#include <common/urcu.hpp>
+#include <common/utils.hpp>
+
+#include <lttng/location-internal.hpp>
+
 #include <dirent.h>
 #include <inttypes.h>
 #include <limits.h>
 #include <sys/types.h>
 #include <urcu.h>
 
-#include <common/common.hpp>
-#include <common/sessiond-comm/sessiond-comm.hpp>
-#include <common/trace-chunk.hpp>
-#include <common/urcu.hpp>
-#include <common/utils.hpp>
-
-#include "lttng-sessiond.hpp"
-#include <lttng/location-internal.hpp>
-
-#include "cmd.hpp"
-#include "kernel.hpp"
-#include "session.hpp"
-#include "timer.hpp"
-#include "trace-ust.hpp"
-#include "utils.hpp"
-
 namespace {
 struct ltt_session_destroy_notifier_element {
        ltt_session_destroy_notifier notifier;
@@ -59,9 +59,9 @@ namespace ls = lttng::sessiond;
 const char *forbidden_name_chars = "/";
 
 /* Global hash table to keep the sessions, indexed by id. */
-struct lttng_ht *ltt_sessions_ht_by_id = NULL;
+struct lttng_ht *ltt_sessions_ht_by_id = nullptr;
 /* Global hash table to keep the sessions, indexed by name. */
-struct lttng_ht *ltt_sessions_ht_by_name = NULL;
+struct lttng_ht *ltt_sessions_ht_by_name = nullptr;
 
 /*
  * Init tracing session list.
@@ -138,7 +138,7 @@ static void del_session_list(struct ltt_session *ls)
 /*
  * Return a pointer to the session list.
  */
-struct ltt_session_list *session_get_list(void)
+struct ltt_session_list *session_get_list()
 {
        return &the_session_list;
 }
@@ -146,12 +146,11 @@ struct ltt_session_list *session_get_list(void)
 /*
  * Returns once the session list is empty.
  */
-void session_list_wait_empty(void)
+void session_list_wait_empty()
 {
        pthread_mutex_lock(&the_session_list.lock);
        while (!cds_list_empty(&the_session_list.head)) {
-               pthread_cond_wait(&the_session_list.removal_cond,
-                               &the_session_list.lock);
+               pthread_cond_wait(&the_session_list.removal_cond, &the_session_list.lock);
        }
        pthread_mutex_unlock(&the_session_list.lock);
 }
@@ -159,7 +158,7 @@ void session_list_wait_empty(void)
 /*
  * Acquire session list lock
  */
-void session_lock_list(void)
+void session_lock_list() noexcept
 {
        pthread_mutex_lock(&the_session_list.lock);
 }
@@ -167,7 +166,7 @@ void session_lock_list(void)
 /*
  * Try to acquire session list lock
  */
-int session_trylock_list(void)
+int session_trylock_list() noexcept
 {
        return pthread_mutex_trylock(&the_session_list.lock);
 }
@@ -175,7 +174,7 @@ int session_trylock_list(void)
 /*
  * Release session list lock
  */
-void session_unlock_list(void)
+void session_unlock_list() noexcept
 {
        pthread_mutex_unlock(&the_session_list.lock);
 }
@@ -185,17 +184,15 @@ void session_unlock_list(void)
  *
  * The caller must hold the session lock.
  */
-enum consumer_dst_type session_get_consumer_destination_type(
-               const struct ltt_session *session)
+enum consumer_dst_type session_get_consumer_destination_type(const struct ltt_session *session)
 {
        /*
         * The output information is duplicated in both of those session types.
         * Hence, it doesn't matter from which it is retrieved. However, it is
         * possible for only one of them to be set.
         */
-       return session->kernel_session ?
-                       session->kernel_session->consumer->type :
-                       session->ust_session->consumer->type;
+       return session->kernel_session ? session->kernel_session->consumer->type :
+                                        session->ust_session->consumer->type;
 }
 
 /*
@@ -206,12 +203,11 @@ enum consumer_dst_type session_get_consumer_destination_type(
  */
 const char *session_get_net_consumer_hostname(const struct ltt_session *session)
 {
-       const char *hostname = NULL;
+       const char *hostname = nullptr;
        const struct consumer_output *output;
 
-       output = session->kernel_session ?
-                       session->kernel_session->consumer :
-                       session->ust_session->consumer;
+       output = session->kernel_session ? session->kernel_session->consumer :
+                                          session->ust_session->consumer;
 
        /*
         * hostname is assumed to be the same for both control and data
@@ -237,13 +233,13 @@ const char *session_get_net_consumer_hostname(const struct ltt_session *session)
  * The caller must hold the session lock.
  */
 void session_get_net_consumer_ports(const struct ltt_session *session,
-               uint16_t *control_port, uint16_t *data_port)
+                                   uint16_t *control_port,
+                                   uint16_t *data_port)
 {
        const struct consumer_output *output;
 
-       output = session->kernel_session ?
-                       session->kernel_session->consumer :
-                       session->ust_session->consumer;
+       output = session->kernel_session ? session->kernel_session->consumer :
+                                          session->ust_session->consumer;
        *control_port = output->dst.net.control.port;
        *data_port = output->dst.net.data.port;
 }
@@ -253,29 +249,28 @@ void session_get_net_consumer_ports(const struct ltt_session *session,
  *
  * The caller must hold the session lock.
  */
-struct lttng_trace_archive_location *session_get_trace_archive_location(
-               const struct ltt_session *session)
+struct lttng_trace_archive_location *
+session_get_trace_archive_location(const struct ltt_session *session)
 {
        int ret;
-       struct lttng_trace_archive_location *location = NULL;
-       char *chunk_path = NULL;
+       struct lttng_trace_archive_location *location = nullptr;
+       char *chunk_path = nullptr;
 
        if (session->rotation_state != LTTNG_ROTATION_STATE_COMPLETED ||
-                       !session->last_archived_chunk_name) {
+           !session->last_archived_chunk_name) {
                goto end;
        }
 
        switch (session_get_consumer_destination_type(session)) {
        case CONSUMER_DST_LOCAL:
                ret = asprintf(&chunk_path,
-                               "%s/" DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY "/%s",
-                               session_get_base_path(session),
-                               session->last_archived_chunk_name);
+                              "%s/" DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY "/%s",
+                              session_get_base_path(session),
+                              session->last_archived_chunk_name);
                if (ret == -1) {
                        goto end;
                }
-               location = lttng_trace_archive_location_local_create(
-                               chunk_path);
+               location = lttng_trace_archive_location_local_create(chunk_path);
                break;
        case CONSUMER_DST_NET:
        {
@@ -283,13 +278,13 @@ struct lttng_trace_archive_location *session_get_trace_archive_location(
                uint16_t control_port, data_port;
 
                hostname = session_get_net_consumer_hostname(session);
-               session_get_net_consumer_ports(session,
-                               &control_port,
-                               &data_port);
+               session_get_net_consumer_ports(session, &control_port, &data_port);
                location = lttng_trace_archive_location_relay_create(
-                               hostname,
-                               LTTNG_TRACE_ARCHIVE_LOCATION_RELAY_PROTOCOL_TYPE_TCP,
-                               control_port, data_port, session->last_chunk_path);
+                       hostname,
+                       LTTNG_TRACE_ARCHIVE_LOCATION_RELAY_PROTOCOL_TYPE_TCP,
+                       control_port,
+                       data_port,
+                       session->last_chunk_path);
                break;
        }
        default:
@@ -305,7 +300,7 @@ end:
  *
  * The session list lock must be held.
  */
-static int ltt_sessions_ht_alloc(void)
+static int ltt_sessions_ht_alloc()
 {
        int ret = 0;
 
@@ -334,16 +329,16 @@ end:
  *
  * The session list lock must be held.
  */
-static void ltt_sessions_ht_destroy(void)
+static void ltt_sessions_ht_destroy()
 {
        if (ltt_sessions_ht_by_id) {
                lttng_ht_destroy(ltt_sessions_ht_by_id);
-               ltt_sessions_ht_by_id = NULL;
+               ltt_sessions_ht_by_id = nullptr;
        }
 
        if (ltt_sessions_ht_by_name) {
                lttng_ht_destroy(ltt_sessions_ht_by_name);
-               ltt_sessions_ht_by_name = NULL;
+               ltt_sessions_ht_by_name = nullptr;
        }
 
        return;
@@ -386,7 +381,7 @@ end:
  * Return `false` if hash table objects are null.
  * The session list lock must be held.
  */
-static bool ltt_sessions_ht_empty(void)
+static bool ltt_sessions_ht_empty()
 {
        bool empty = false;
 
@@ -468,10 +463,9 @@ void session_unlock(struct ltt_session *session)
        pthread_mutex_unlock(&session->lock);
 }
 
-static
-int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
-               struct lttng_trace_chunk *new_trace_chunk,
-               struct lttng_trace_chunk **_current_trace_chunk)
+static int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
+                                                 struct lttng_trace_chunk *new_trace_chunk,
+                                                 struct lttng_trace_chunk **_current_trace_chunk)
 {
        int ret = 0;
        unsigned int i, refs_to_acquire = 0, refs_acquired = 0, refs_to_release = 0;
@@ -481,22 +475,20 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
        uint64_t chunk_id;
        enum lttng_trace_chunk_status chunk_status;
 
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        /*
         * Ownership of current trace chunk is transferred to
         * `current_trace_chunk`.
         */
        current_trace_chunk = session->current_trace_chunk;
-       session->current_trace_chunk = NULL;
+       session->current_trace_chunk = nullptr;
        if (session->ust_session) {
-               lttng_trace_chunk_put(
-                               session->ust_session->current_trace_chunk);
-               session->ust_session->current_trace_chunk = NULL;
+               lttng_trace_chunk_put(session->ust_session->current_trace_chunk);
+               session->ust_session->current_trace_chunk = nullptr;
        }
        if (session->kernel_session) {
-               lttng_trace_chunk_put(
-                               session->kernel_session->current_trace_chunk);
-               session->kernel_session->current_trace_chunk = NULL;
+               lttng_trace_chunk_put(session->kernel_session->current_trace_chunk);
+               session->kernel_session->current_trace_chunk = nullptr;
        }
        if (!new_trace_chunk) {
                ret = 0;
@@ -509,40 +501,37 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
        refs_to_acquire += !!session->ust_session;
        refs_to_acquire += !!session->kernel_session;
 
-       for (refs_acquired = 0; refs_acquired < refs_to_acquire;
-                       refs_acquired++) {
+       for (refs_acquired = 0; refs_acquired < refs_to_acquire; refs_acquired++) {
                if (!lttng_trace_chunk_get(new_trace_chunk)) {
                        ERR("Failed to acquire reference to new trace chunk of session \"%s\"",
-                                       session->name);
+                           session->name);
                        goto error;
                }
        }
 
        if (session->ust_session) {
-               const uint64_t relayd_id =
-                               session->ust_session->consumer->net_seq_index;
-               const bool is_local_trace =
-                               session->ust_session->consumer->type ==
-                               CONSUMER_DST_LOCAL;
+               const uint64_t relayd_id = session->ust_session->consumer->net_seq_index;
+               const bool is_local_trace = session->ust_session->consumer->type ==
+                       CONSUMER_DST_LOCAL;
 
                session->ust_session->current_trace_chunk = new_trace_chunk;
                if (is_local_trace) {
                        enum lttng_error_code ret_error_code;
 
-                       ret_error_code = ust_app_create_channel_subdirectories(
-                                       session->ust_session);
+                       ret_error_code =
+                               ust_app_create_channel_subdirectories(session->ust_session);
                        if (ret_error_code != LTTNG_OK) {
                                goto error;
                        }
                }
-               cds_lfht_for_each_entry(
-                               session->ust_session->consumer->socks->ht,
-                               &iter, socket, node.node) {
+               cds_lfht_for_each_entry (
+                       session->ust_session->consumer->socks->ht, &iter, socket, node.node) {
                        pthread_mutex_lock(socket->lock);
                        ret = consumer_create_trace_chunk(socket,
-                                       relayd_id,
-                                       session->id, new_trace_chunk,
-                                       DEFAULT_UST_TRACE_DIR);
+                                                         relayd_id,
+                                                         session->id,
+                                                         new_trace_chunk,
+                                                         DEFAULT_UST_TRACE_DIR);
                        pthread_mutex_unlock(socket->lock);
                        if (ret) {
                                goto error;
@@ -550,30 +539,28 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
                }
        }
        if (session->kernel_session) {
-               const uint64_t relayd_id =
-                               session->kernel_session->consumer->net_seq_index;
-               const bool is_local_trace =
-                               session->kernel_session->consumer->type ==
-                               CONSUMER_DST_LOCAL;
+               const uint64_t relayd_id = session->kernel_session->consumer->net_seq_index;
+               const bool is_local_trace = session->kernel_session->consumer->type ==
+                       CONSUMER_DST_LOCAL;
 
                session->kernel_session->current_trace_chunk = new_trace_chunk;
                if (is_local_trace) {
                        enum lttng_error_code ret_error_code;
 
-                       ret_error_code = kernel_create_channel_subdirectories(
-                                       session->kernel_session);
+                       ret_error_code =
+                               kernel_create_channel_subdirectories(session->kernel_session);
                        if (ret_error_code != LTTNG_OK) {
                                goto error;
                        }
                }
-               cds_lfht_for_each_entry(
-                               session->kernel_session->consumer->socks->ht,
-                               &iter, socket, node.node) {
+               cds_lfht_for_each_entry (
+                       session->kernel_session->consumer->socks->ht, &iter, socket, node.node) {
                        pthread_mutex_lock(socket->lock);
                        ret = consumer_create_trace_chunk(socket,
-                                       relayd_id,
-                                       session->id, new_trace_chunk,
-                                       DEFAULT_KERNEL_TRACE_DIR);
+                                                         relayd_id,
+                                                         session->id,
+                                                         new_trace_chunk,
+                                                         DEFAULT_KERNEL_TRACE_DIR);
                        pthread_mutex_unlock(socket->lock);
                        if (ret) {
                                goto error;
@@ -590,18 +577,17 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
 end:
        if (_current_trace_chunk) {
                *_current_trace_chunk = current_trace_chunk;
-               current_trace_chunk = NULL;
+               current_trace_chunk = nullptr;
        }
 end_no_move:
-       rcu_read_unlock();
        lttng_trace_chunk_put(current_trace_chunk);
        return ret;
 error:
        if (session->ust_session) {
-               session->ust_session->current_trace_chunk = NULL;
+               session->ust_session->current_trace_chunk = nullptr;
        }
        if (session->kernel_session) {
-               session->kernel_session->current_trace_chunk = NULL;
+               session->kernel_session->current_trace_chunk = nullptr;
        }
        /*
         * Release references taken in the case where all references could not
@@ -615,19 +601,19 @@ error:
        goto end_no_move;
 }
 
-struct lttng_trace_chunk *session_create_new_trace_chunk(
-               const struct ltt_session *session,
-               const struct consumer_output *consumer_output_override,
-               const char *session_base_path_override,
-               const char *chunk_name_override)
+struct lttng_trace_chunk *
+session_create_new_trace_chunk(const struct ltt_session *session,
+                              const struct consumer_output *consumer_output_override,
+                              const char *session_base_path_override,
+                              const char *chunk_name_override)
 {
        int ret;
-       struct lttng_trace_chunk *trace_chunk = NULL;
+       struct lttng_trace_chunk *trace_chunk = nullptr;
        enum lttng_trace_chunk_status chunk_status;
-       const time_t chunk_creation_ts = time(NULL);
+       const time_t chunk_creation_ts = time(nullptr);
        bool is_local_trace;
        const char *base_path;
-       struct lttng_directory_handle *session_output_directory = NULL;
+       struct lttng_directory_handle *session_output_directory = nullptr;
        const struct lttng_credentials session_credentials = {
                .uid = LTTNG_OPTIONAL_INIT_VALUE(session->uid),
                .gid = LTTNG_OPTIONAL_INIT_VALUE(session->gid),
@@ -640,28 +626,26 @@ struct lttng_trace_chunk *session_create_new_trace_chunk(
                output = consumer_output_override;
        } else {
                LTTNG_ASSERT(session->ust_session || session->kernel_session);
-               output = session->ust_session ?
-                                        session->ust_session->consumer :
-                                        session->kernel_session->consumer;
+               output = session->ust_session ? session->ust_session->consumer :
+                                               session->kernel_session->consumer;
        }
 
        is_local_trace = output->type == CONSUMER_DST_LOCAL;
-       base_path = session_base_path_override ? :
-                       consumer_output_get_base_path(output);
+       base_path = session_base_path_override ?: consumer_output_get_base_path(output);
 
        if (chunk_creation_ts == (time_t) -1) {
                PERROR("Failed to sample time while creation session \"%s\" trace chunk",
-                               session->name);
+                      session->name);
                goto error;
        }
 
-       next_chunk_id = session->most_recent_chunk_id.is_set ?
-                       session->most_recent_chunk_id.value + 1 : 0;
+       next_chunk_id =
+               session->most_recent_chunk_id.is_set ? session->most_recent_chunk_id.value + 1 : 0;
 
        if (session->current_trace_chunk &&
-                       !lttng_trace_chunk_get_name_overridden(session->current_trace_chunk)) {
+           !lttng_trace_chunk_get_name_overridden(session->current_trace_chunk)) {
                chunk_status = lttng_trace_chunk_rename_path(session->current_trace_chunk,
-                                       DEFAULT_CHUNK_TMP_OLD_DIRECTORY);
+                                                            DEFAULT_CHUNK_TMP_OLD_DIRECTORY);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        goto error;
                }
@@ -670,21 +654,19 @@ struct lttng_trace_chunk *session_create_new_trace_chunk(
                if (!session->rotated) {
                        new_path = "";
                } else {
-                       new_path = NULL;
+                       new_path = nullptr;
                }
        } else {
                new_path = DEFAULT_CHUNK_TMP_NEW_DIRECTORY;
        }
 
-       trace_chunk = lttng_trace_chunk_create(next_chunk_id,
-                       chunk_creation_ts, new_path);
+       trace_chunk = lttng_trace_chunk_create(next_chunk_id, chunk_creation_ts, new_path);
        if (!trace_chunk) {
                goto error;
        }
 
        if (chunk_name_override) {
-               chunk_status = lttng_trace_chunk_override_name(trace_chunk,
-                               chunk_name_override);
+               chunk_status = lttng_trace_chunk_override_name(trace_chunk, chunk_name_override);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        goto error;
                }
@@ -698,16 +680,13 @@ struct lttng_trace_chunk *session_create_new_trace_chunk(
                goto end;
        }
 
-       chunk_status = lttng_trace_chunk_set_credentials(trace_chunk,
-                       &session_credentials);
+       chunk_status = lttng_trace_chunk_set_credentials(trace_chunk, &session_credentials);
        if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                goto error;
        }
 
-       DBG("Creating base output directory of session \"%s\" at %s",
-                       session->name, base_path);
-       ret = utils_mkdir_recursive(base_path, S_IRWXU | S_IRWXG,
-                       session->uid, session->gid);
+       DBG("Creating base output directory of session \"%s\" at %s", session->name, base_path);
+       ret = utils_mkdir_recursive(base_path, S_IRWXU | S_IRWXG, session->uid, session->gid);
        if (ret) {
                goto error;
        }
@@ -715,10 +694,9 @@ struct lttng_trace_chunk *session_create_new_trace_chunk(
        if (!session_output_directory) {
                goto error;
        }
-       chunk_status = lttng_trace_chunk_set_as_owner(trace_chunk,
-                       session_output_directory);
+       chunk_status = lttng_trace_chunk_set_as_owner(trace_chunk, session_output_directory);
        lttng_directory_handle_put(session_output_directory);
-       session_output_directory = NULL;
+       session_output_directory = nullptr;
        if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                goto error;
        }
@@ -727,25 +705,24 @@ end:
 error:
        lttng_directory_handle_put(session_output_directory);
        lttng_trace_chunk_put(trace_chunk);
-       trace_chunk = NULL;
+       trace_chunk = nullptr;
        goto end;
 }
 
 int session_close_trace_chunk(struct ltt_session *session,
-               struct lttng_trace_chunk *trace_chunk,
-               enum lttng_trace_chunk_command_type close_command,
-               char *closed_trace_chunk_path)
+                             struct lttng_trace_chunk *trace_chunk,
+                             enum lttng_trace_chunk_command_type close_command,
+                             char *closed_trace_chunk_path)
 {
        int ret = 0;
        bool error_occurred = false;
        struct cds_lfht_iter iter;
        struct consumer_socket *socket;
        enum lttng_trace_chunk_status chunk_status;
-       const time_t chunk_close_timestamp = time(NULL);
+       const time_t chunk_close_timestamp = time(nullptr);
        const char *new_path;
 
-       chunk_status = lttng_trace_chunk_set_close_command(
-                       trace_chunk, close_command);
+       chunk_status = lttng_trace_chunk_set_close_command(trace_chunk, close_command);
        if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                ret = -1;
                goto end;
@@ -753,7 +730,7 @@ int session_close_trace_chunk(struct ltt_session *session,
 
        if (chunk_close_timestamp == (time_t) -1) {
                ERR("Failed to sample the close timestamp of the current trace chunk of session \"%s\"",
-                               session->name);
+                   session->name);
                ret = -1;
                goto end;
        }
@@ -763,30 +740,29 @@ int session_close_trace_chunk(struct ltt_session *session,
                new_path = "";
        } else {
                /* Use chunk name for new chunk. */
-               new_path = NULL;
+               new_path = nullptr;
        }
        if (session->current_trace_chunk &&
-                       !lttng_trace_chunk_get_name_overridden(session->current_trace_chunk)) {
+           !lttng_trace_chunk_get_name_overridden(session->current_trace_chunk)) {
                /* Rename new chunk path. */
-               chunk_status = lttng_trace_chunk_rename_path(session->current_trace_chunk,
-                                       new_path);
+               chunk_status =
+                       lttng_trace_chunk_rename_path(session->current_trace_chunk, new_path);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        ret = -1;
                        goto end;
                }
        }
        if (!lttng_trace_chunk_get_name_overridden(trace_chunk) &&
-                       close_command == LTTNG_TRACE_CHUNK_COMMAND_TYPE_NO_OPERATION) {
+           close_command == LTTNG_TRACE_CHUNK_COMMAND_TYPE_NO_OPERATION) {
                const char *old_path;
 
                if (!session->rotated) {
                        old_path = "";
                } else {
-                       old_path = NULL;
+                       old_path = nullptr;
                }
                /* We need to move back the .tmp_old_chunk to its rightful place. */
-               chunk_status = lttng_trace_chunk_rename_path(trace_chunk,
-                                       old_path);
+               chunk_status = lttng_trace_chunk_rename_path(trace_chunk, old_path);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        ret = -1;
                        goto end;
@@ -795,27 +771,25 @@ int session_close_trace_chunk(struct ltt_session *session,
        if (close_command == LTTNG_TRACE_CHUNK_COMMAND_TYPE_MOVE_TO_COMPLETED) {
                session->rotated = true;
        }
-       chunk_status = lttng_trace_chunk_set_close_timestamp(trace_chunk,
-                       chunk_close_timestamp);
+       chunk_status = lttng_trace_chunk_set_close_timestamp(trace_chunk, chunk_close_timestamp);
        if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                ERR("Failed to set the close timestamp of the current trace chunk of session \"%s\"",
-                               session->name);
+                   session->name);
                ret = -1;
                goto end;
        }
 
        if (session->ust_session) {
-               const uint64_t relayd_id =
-                               session->ust_session->consumer->net_seq_index;
+               const uint64_t relayd_id = session->ust_session->consumer->net_seq_index;
 
-               cds_lfht_for_each_entry(
-                               session->ust_session->consumer->socks->ht,
-                               &iter, socket, node.node) {
+               cds_lfht_for_each_entry (
+                       session->ust_session->consumer->socks->ht, &iter, socket, node.node) {
                        pthread_mutex_lock(socket->lock);
                        ret = consumer_close_trace_chunk(socket,
-                                       relayd_id,
-                                       session->id,
-                                       trace_chunk, closed_trace_chunk_path);
+                                                        relayd_id,
+                                                        session->id,
+                                                        trace_chunk,
+                                                        closed_trace_chunk_path);
                        pthread_mutex_unlock(socket->lock);
                        if (ret) {
                                ERR("Failed to close trace chunk on user space consumer");
@@ -824,17 +798,16 @@ int session_close_trace_chunk(struct ltt_session *session,
                }
        }
        if (session->kernel_session) {
-               const uint64_t relayd_id =
-                               session->kernel_session->consumer->net_seq_index;
+               const uint64_t relayd_id = session->kernel_session->consumer->net_seq_index;
 
-               cds_lfht_for_each_entry(
-                               session->kernel_session->consumer->socks->ht,
-                               &iter, socket, node.node) {
+               cds_lfht_for_each_entry (
+                       session->kernel_session->consumer->socks->ht, &iter, socket, node.node) {
                        pthread_mutex_lock(socket->lock);
                        ret = consumer_close_trace_chunk(socket,
-                                       relayd_id,
-                                       session->id,
-                                       trace_chunk, closed_trace_chunk_path);
+                                                        relayd_id,
+                                                        session->id,
+                                                        trace_chunk,
+                                                        closed_trace_chunk_path);
                        pthread_mutex_unlock(socket->lock);
                        if (ret) {
                                ERR("Failed to close trace chunk on kernel consumer");
@@ -863,8 +836,7 @@ end:
  * daemon as the same "offset" in a metadata stream will no longer point
  * to the same content.
  */
-static
-enum lttng_error_code session_kernel_open_packets(struct ltt_session *session)
+static enum lttng_error_code session_kernel_open_packets(struct ltt_session *session)
 {
        enum lttng_error_code ret = LTTNG_OK;
        struct consumer_socket *socket;
@@ -872,19 +844,20 @@ enum lttng_error_code session_kernel_open_packets(struct ltt_session *session)
        struct cds_lfht_node *node;
        struct ltt_kernel_channel *chan;
 
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
 
        cds_lfht_first(session->kernel_session->consumer->socks->ht, &iter.iter);
        node = cds_lfht_iter_get_node(&iter.iter);
-       socket = container_of(node, typeof(*socket), node.node);
+       socket = caa_container_of(node, typeof(*socket), node.node);
 
-       cds_list_for_each_entry(chan,
-                       &session->kernel_session->channel_list.head, list) {
+       cds_list_for_each_entry (chan, &session->kernel_session->channel_list.head, list) {
                int open_ret;
 
                DBG("Open packet of kernel channel: channel key = %" PRIu64
-                               ", session name = %s, session_id = %" PRIu64,
-                               chan->key, session->name, session->id);
+                   ", session name = %s, session_id = %" PRIu64,
+                   chan->key,
+                   session->name,
+                   session->id);
 
                open_ret = consumer_open_channel_packets(socket, chan->key);
                if (open_ret < 0) {
@@ -895,7 +868,6 @@ enum lttng_error_code session_kernel_open_packets(struct ltt_session *session)
        }
 
 end:
-       rcu_read_unlock();
        return ret;
 }
 
@@ -904,7 +876,8 @@ enum lttng_error_code session_open_packets(struct ltt_session *session)
        enum lttng_error_code ret = LTTNG_OK;
 
        DBG("Opening packets of session channels: session name = %s, session id = %" PRIu64,
-                       session->name, session->id);
+           session->name,
+           session->id);
 
        if (session->ust_session) {
                ret = ust_app_open_packets(session);
@@ -930,25 +903,23 @@ end:
  * Must be called with the session lock held.
  */
 int session_set_trace_chunk(struct ltt_session *session,
-               struct lttng_trace_chunk *new_trace_chunk,
-               struct lttng_trace_chunk **current_trace_chunk)
+                           struct lttng_trace_chunk *new_trace_chunk,
+                           struct lttng_trace_chunk **current_trace_chunk)
 {
        ASSERT_LOCKED(session->lock);
-       return _session_set_trace_chunk_no_lock_check(session, new_trace_chunk,
-                       current_trace_chunk);
+       return _session_set_trace_chunk_no_lock_check(
+               session, new_trace_chunk, current_trace_chunk);
 }
 
-static
-void session_notify_destruction(const struct ltt_session *session)
+static void session_notify_destruction(const struct ltt_session *session)
 {
        size_t i;
-       const size_t count = lttng_dynamic_array_get_count(
-                       &session->destroy_notifiers);
+       const size_t count = lttng_dynamic_array_get_count(&session->destroy_notifiers);
 
        for (i = 0; i < count; i++) {
                const struct ltt_session_destroy_notifier_element *element =
                        (ltt_session_destroy_notifier_element *) lttng_dynamic_array_get_element(
-                                       &session->destroy_notifiers, i);
+                               &session->destroy_notifiers, i);
 
                element->notifier(session, element->user_data);
        }
@@ -957,29 +928,27 @@ void session_notify_destruction(const struct ltt_session *session)
 /*
  * Fire each clear notifier once, and remove them from the array.
  */
-void session_notify_clear(struct ltt_session *session)
+void session_notify_clear(ltt_session& session)
 {
        size_t i;
-       const size_t count = lttng_dynamic_array_get_count(
-                       &session->clear_notifiers);
+       const size_t count = lttng_dynamic_array_get_count(&session.clear_notifiers);
 
        for (i = 0; i < count; i++) {
                const struct ltt_session_clear_notifier_element *element =
                        (ltt_session_clear_notifier_element *) lttng_dynamic_array_get_element(
-                                       &session->clear_notifiers, i);
+                               &session.clear_notifiers, i);
 
-               element->notifier(session, element->user_data);
+               element->notifier(&session, element->user_data);
        }
-       lttng_dynamic_array_clear(&session->clear_notifiers);
+       lttng_dynamic_array_clear(&session.clear_notifiers);
 }
 
-static
-void session_release(struct urcu_ref *ref)
+static void session_release(struct urcu_ref *ref)
 {
        int ret;
        struct ltt_ust_session *usess;
        struct ltt_kernel_session *ksess;
-       struct ltt_session *session = container_of(ref, typeof(*session), ref);
+       struct ltt_session *session = lttng::utils::container_of(ref, &ltt_session::ref);
        const bool session_published = session->published;
 
        LTTNG_ASSERT(!session->chunk_being_archived);
@@ -1029,10 +998,10 @@ void session_release(struct urcu_ref *ref)
 
        consumer_output_put(session->consumer);
        kernel_free_session(ksess);
-       session->kernel_session = NULL;
+       session->kernel_session = nullptr;
        if (usess) {
                trace_ust_free_session(usess);
-               session->ust_session = NULL;
+               session->ust_session = nullptr;
        }
        lttng_dynamic_array_reset(&session->destroy_notifiers);
        lttng_dynamic_array_reset(&session->clear_notifiers);
@@ -1110,27 +1079,23 @@ void session_destroy(struct ltt_session *session)
 }
 
 int session_add_destroy_notifier(struct ltt_session *session,
-               ltt_session_destroy_notifier notifier, void *user_data)
+                                ltt_session_destroy_notifier notifier,
+                                void *user_data)
 {
-       const struct ltt_session_destroy_notifier_element element = {
-               .notifier = notifier,
-               .user_data = user_data
-       };
+       const struct ltt_session_destroy_notifier_element element = { .notifier = notifier,
+                                                                     .user_data = user_data };
 
-       return lttng_dynamic_array_add_element(&session->destroy_notifiers,
-                       &element);
+       return lttng_dynamic_array_add_element(&session->destroy_notifiers, &element);
 }
 
 int session_add_clear_notifier(struct ltt_session *session,
-               ltt_session_clear_notifier notifier, void *user_data)
+                              ltt_session_clear_notifier notifier,
+                              void *user_data)
 {
-       const struct ltt_session_clear_notifier_element element = {
-               .notifier = notifier,
-               .user_data = user_data
-       };
+       const struct ltt_session_clear_notifier_element element = { .notifier = notifier,
+                                                                   .user_data = user_data };
 
-       return lttng_dynamic_array_add_element(&session->clear_notifiers,
-                       &element);
+       return lttng_dynamic_array_add_element(&session->clear_notifiers, &element);
 }
 
 /*
@@ -1148,16 +1113,15 @@ struct ltt_session *session_find_by_name(const char *name)
 
        DBG2("Trying to find session by name %s", name);
 
-       cds_list_for_each_entry(iter, &the_session_list.head, list) {
-               if (!strncmp(iter->name, name, NAME_MAX) &&
-                               !iter->destroyed) {
+       cds_list_for_each_entry (iter, &the_session_list.head, list) {
+               if (!strncmp(iter->name, name, NAME_MAX) && !iter->destroyed) {
                        goto found;
                }
        }
 
-       return NULL;
+       return nullptr;
 found:
-       return session_get(iter) ? iter : NULL;
+       return session_get(iter) ? iter : nullptr;
 }
 
 /*
@@ -1180,29 +1144,29 @@ struct ltt_session *session_find_by_id(uint64_t id)
 
        lttng_ht_lookup(ltt_sessions_ht_by_id, &id, &iter);
        node = lttng_ht_iter_get_node_u64(&iter);
-       if (node == NULL) {
+       if (node == nullptr) {
                goto end;
        }
-       ls = caa_container_of(node, struct ltt_session, node);
+       ls = lttng::utils::container_of(node, &ltt_session::node);
 
        DBG3("Session %" PRIu64 " found by id.", id);
-       return session_get(ls) ? ls : NULL;
+       return session_get(ls) ? ls : nullptr;
 
 end:
        DBG3("Session %" PRIu64 " NOT found by id", id);
-       return NULL;
+       return nullptr;
 }
 
 /*
  * Create a new session and add it to the session list.
  * Session list lock must be held by the caller.
  */
-enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
-               struct ltt_session **out_session)
+enum lttng_error_code
+session_create(const char *name, uid_t uid, gid_t gid, struct ltt_session **out_session)
 {
        int ret;
        enum lttng_error_code ret_code;
-       struct ltt_session *new_session = NULL;
+       struct ltt_session *new_session = nullptr;
 
        ASSERT_LOCKED(the_session_list.lock);
        if (name) {
@@ -1223,15 +1187,15 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
        }
 
        lttng_dynamic_array_init(&new_session->destroy_notifiers,
-                       sizeof(struct ltt_session_destroy_notifier_element),
-                       NULL);
+                                sizeof(struct ltt_session_destroy_notifier_element),
+                                nullptr);
        lttng_dynamic_array_init(&new_session->clear_notifiers,
-                       sizeof(struct ltt_session_clear_notifier_element),
-                       NULL);
+                                sizeof(struct ltt_session_clear_notifier_element),
+                                nullptr);
        urcu_ref_init(&new_session->ref);
-       pthread_mutex_init(&new_session->lock, NULL);
+       pthread_mutex_init(&new_session->lock, nullptr);
 
-       new_session->creation_time = time(NULL);
+       new_session->creation_time = time(nullptr);
        if (new_session->creation_time == (time_t) -1) {
                PERROR("Failed to sample session creation time");
                ret_code = LTTNG_ERR_SESSION_FAIL;
@@ -1240,7 +1204,7 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
 
        /* Create default consumer output. */
        new_session->consumer = consumer_create_output(CONSUMER_DST_LOCAL);
-       if (new_session->consumer == NULL) {
+       if (new_session->consumer == nullptr) {
                ret_code = LTTNG_ERR_NOMEM;
                goto error;
        }
@@ -1273,16 +1237,17 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
 
                        if (i == 0) {
                                ret = snprintf(new_session->name,
-                                               sizeof(new_session->name),
-                                               "%s-%s",
-                                               DEFAULT_SESSION_NAME,
-                                               datetime);
+                                              sizeof(new_session->name),
+                                              "%s-%s",
+                                              DEFAULT_SESSION_NAME,
+                                              datetime);
                        } else {
                                ret = snprintf(new_session->name,
-                                               sizeof(new_session->name),
-                                               "%s%d-%s",
-                                               DEFAULT_SESSION_NAME, i,
-                                               datetime);
+                                              sizeof(new_session->name),
+                                              "%s%d-%s",
+                                              DEFAULT_SESSION_NAME,
+                                              i,
+                                              datetime);
                        }
                        new_session->name_contains_creation_time = true;
                        if (ret == -1 || ret >= sizeof(new_session->name)) {
@@ -1295,8 +1260,7 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
                                goto error;
                        }
 
-                       clashing_session =
-                                       session_find_by_name(new_session->name);
+                       clashing_session = session_find_by_name(new_session->name);
                        session_put(clashing_session);
                        if (!clashing_session) {
                                found_name = true;
@@ -1318,7 +1282,7 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
                if (errno == ENAMETOOLONG) {
                        new_session->hostname[sizeof(new_session->hostname) - 1] = '\0';
                        ERR("Hostname exceeds the maximal permitted length and has been truncated to %s",
-                                       new_session->hostname);
+                           new_session->hostname);
                } else {
                        ret_code = LTTNG_ERR_SESSION_FAIL;
                        goto error;
@@ -1353,8 +1317,10 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
         * set it up and, if valid, assign it to the session.
         */
        DBG("Tracing session %s created with ID %" PRIu64 " by uid = %d, gid = %d",
-                       new_session->name, new_session->id, new_session->uid,
-                       new_session->gid);
+           new_session->name,
+           new_session->id,
+           new_session->uid,
+           new_session->gid);
        ret_code = LTTNG_OK;
 end:
        if (new_session) {
@@ -1364,7 +1330,7 @@ end:
        return ret_code;
 error:
        session_put(new_session);
-       new_session = NULL;
+       new_session = nullptr;
        goto end;
 }
 
@@ -1393,30 +1359,26 @@ bool session_access_ok(struct ltt_session *session, uid_t uid)
  *
  * Must be called with the session and session_list locks held.
  */
-int session_reset_rotation_state(struct ltt_session *session,
-               enum lttng_rotation_state result)
+int session_reset_rotation_state(ltt_session& session, enum lttng_rotation_state result)
 {
        int ret = 0;
 
        ASSERT_LOCKED(the_session_list.lock);
-       ASSERT_LOCKED(session->lock);
+       ASSERT_LOCKED(session.lock);
 
-       session->rotation_state = result;
-       if (session->rotation_pending_check_timer_enabled) {
+       session.rotation_state = result;
+       if (session.rotation_pending_check_timer_enabled) {
                ret = timer_session_rotation_pending_check_stop(session);
        }
-       if (session->chunk_being_archived) {
+       if (session.chunk_being_archived) {
                uint64_t chunk_id;
                enum lttng_trace_chunk_status chunk_status;
 
-               chunk_status = lttng_trace_chunk_get_id(
-                               session->chunk_being_archived,
-                               &chunk_id);
+               chunk_status = lttng_trace_chunk_get_id(session.chunk_being_archived, &chunk_id);
                LTTNG_ASSERT(chunk_status == LTTNG_TRACE_CHUNK_STATUS_OK);
-               LTTNG_OPTIONAL_SET(&session->last_archived_chunk_id,
-                               chunk_id);
-               lttng_trace_chunk_put(session->chunk_being_archived);
-               session->chunk_being_archived = NULL;
+               LTTNG_OPTIONAL_SET(&session.last_archived_chunk_id, chunk_id);
+               lttng_trace_chunk_put(session.chunk_being_archived);
+               session.chunk_being_archived = nullptr;
                /*
                 * Fire the clear reply notifiers if we are completing a clear
                 * rotation.
@@ -1442,7 +1404,7 @@ bool sample_session_id_by_name(const char *name, uint64_t *id)
        struct lttng_ht_iter iter;
        struct ltt_session *ls;
 
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
 
        if (!ltt_sessions_ht_by_name) {
                found = false;
@@ -1451,23 +1413,26 @@ bool sample_session_id_by_name(const char *name, uint64_t *id)
 
        lttng_ht_lookup(ltt_sessions_ht_by_name, name, &iter);
        node = lttng_ht_iter_get_node_str(&iter);
-       if (node == NULL) {
+       if (node == nullptr) {
                found = false;
                goto end;
        }
 
-       ls = caa_container_of(node, struct ltt_session, node_by_name);
+       ls = lttng::utils::container_of(node, &ltt_session::node_by_name);
        *id = ls->id;
        found = true;
 
        DBG3("Session id `%" PRIu64 "` sampled for session `%s", *id, name);
 end:
-       rcu_read_unlock();
        return found;
 }
 
 void ls::details::locked_session_release(ltt_session *session)
 {
+       if (!session) {
+               return;
+       }
+
        session_unlock(session);
        session_put(session);
 }
@@ -1498,5 +1463,5 @@ ltt_session::sptr ls::find_session_by_id(ltt_session::id_t id)
                return nullptr;
        }
 
-       return {session, session_put};
+       return { session, session_put };
 }
This page took 0.040253 seconds and 4 git commands to generate.