X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fsession.c;h=e1065549997b72c933ae0bdd0fae145a2a7fec68;hp=5d5aa4c643d8e0d289fd9499d177277fdd068c81;hb=86eff0042bf0b9e6277b281c4f3a680d997790d2;hpb=7145f5e9af16907c65a514fe9112e99564cf6333 diff --git a/src/bin/lttng-relayd/session.c b/src/bin/lttng-relayd/session.c index 5d5aa4c64..e10655499 100644 --- a/src/bin/lttng-relayd/session.c +++ b/src/bin/lttng-relayd/session.c @@ -1,29 +1,19 @@ /* - * Copyright (C) 2013 - Julien Desfossez - * David Goulet - * 2015 - Mathieu Desnoyers + * Copyright (C) 2013 Julien Desfossez + * Copyright (C) 2013 David Goulet + * Copyright (C) 2015 Mathieu Desnoyers * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define _LGPL_SOURCE #include -#include +#include +#include #include #include #include -#include #include #include @@ -206,7 +196,7 @@ static struct lttng_directory_handle *session_create_output_directory_handle( goto end; } - handle = lttng_directory_handle_create(full_session_path); + handle = fd_tracker_create_directory_handle(the_fd_tracker, full_session_path); end: pthread_mutex_unlock(&session->lock); free(full_session_path); @@ -230,6 +220,7 @@ static int session_set_anonymous_chunk(struct relay_session *session) goto end; } + lttng_trace_chunk_set_fd_tracker(chunk, the_fd_tracker); status = lttng_trace_chunk_set_credentials_current_user(chunk); if (status != LTTNG_TRACE_CHUNK_STATUS_OK) { ret = -1; @@ -242,8 +233,6 @@ static int session_set_anonymous_chunk(struct relay_session *session) goto end; } - lttng_trace_chunk_set_fd_tracker(chunk, the_fd_tracker); - output_directory = NULL; session->current_trace_chunk = chunk; chunk = NULL; end: @@ -326,9 +315,20 @@ struct relay_session *session_create(const char *session_name, PERROR("Failed to allocate session"); goto error; } + + pthread_mutex_lock(&last_relay_session_id_lock); + session->id = ++last_relay_session_id; + pthread_mutex_unlock(&last_relay_session_id_lock); + + lttng_ht_node_init_u64(&session->session_n, session->id); + urcu_ref_init(&session->ref); + CDS_INIT_LIST_HEAD(&session->recv_list); + pthread_mutex_init(&session->lock, NULL); + pthread_mutex_init(&session->recv_list_lock, NULL); + if (lttng_strncpy(session->session_name, session_name, sizeof(session->session_name))) { - WARN("Session name exceeds maximal allowed length"); + WARN("Session name exceeds maximal allowed length"); goto error; } if (lttng_strncpy(session->hostname, hostname, @@ -343,6 +343,12 @@ struct relay_session *session_create(const char *session_name, } if (creation_time) { LTTNG_OPTIONAL_SET(&session->creation_time, *creation_time); + } else { + LTTNG_OPTIONAL_SET(&session->creation_time, time(NULL)); + if (session->creation_time.value == (time_t) -1) { + PERROR("Failed to sample session creation time"); + goto error; + } } session->session_name_contains_creation_time = session_name_contains_creation_time; @@ -352,17 +358,8 @@ struct relay_session *session_create(const char *session_name, goto error; } - pthread_mutex_lock(&last_relay_session_id_lock); - session->id = ++last_relay_session_id; - pthread_mutex_unlock(&last_relay_session_id_lock); - session->major = major; session->minor = minor; - lttng_ht_node_init_u64(&session->session_n, session->id); - urcu_ref_init(&session->ref); - CDS_INIT_LIST_HEAD(&session->recv_list); - pthread_mutex_init(&session->lock, NULL); - pthread_mutex_init(&session->recv_list_lock, NULL); session->live_timer = live_timer; session->snapshot = snapshot; @@ -397,14 +394,14 @@ struct relay_session *session_create(const char *session_name, session->id_sessiond.value, *current_chunk_id); if (!session->current_trace_chunk) { - char uuid_str[LTTNG_UUID_STR_LEN]; + char uuid_str[LTTNG_UUID_STR_LEN]; lttng_uuid_to_str(sessiond_uuid, uuid_str); ERR("Could not find trace chunk: sessiond = {%s}, sessiond session id = %" PRIu64 ", trace chunk id = %" PRIu64, uuid_str, *id_sessiond, *current_chunk_id); goto error; - } + } chunk_status = lttng_trace_chunk_get_session_output_directory_handle( session->current_trace_chunk,