X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Flttng-ctl%2Fdestruction-handle.c;h=8c832969b176be931c9acd101c6106b0d1502373;hb=b0563feda603e2f21fb331adb4994edf4080f891;hp=e22deaa930ef86fd74f25f58df6d156d39591aec;hpb=3e3665b89947ebdd812bcfaca1090d22b34d5778;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/destruction-handle.c b/src/lib/lttng-ctl/destruction-handle.c index e22deaa93..8c832969b 100644 --- a/src/lib/lttng-ctl/destruction-handle.c +++ b/src/lib/lttng-ctl/destruction-handle.c @@ -1,18 +1,8 @@ /* - * Copyright (C) 2019 - Jérémie Galarneau + * Copyright (C) 2019 Jérémie Galarneau * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License, version 2.1 only, - * as published by the Free Software Foundation. + * SPDX-License-Identifier: LGPL-2.1-only * - * This library 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 Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -69,7 +59,7 @@ void lttng_destruction_handle_destroy(struct lttng_destruction_handle *handle) } lttng_poll_clean(&handle->communication.events); lttng_dynamic_buffer_reset(&handle->communication.buffer); - lttng_trace_archive_location_destroy(handle->location); + lttng_trace_archive_location_put(handle->location); free(handle); } @@ -183,6 +173,7 @@ int handle_state_transition(struct lttng_destruction_handle *handle) ret = -1; break; } else { + /* Ownership is transferred to the destruction handle. */ handle->location = location; handle->communication.state = COMMUNICATION_STATE_END; } @@ -243,6 +234,11 @@ lttng_destruction_handle_wait_for_completion( const bool has_timeout = timeout_ms > 0; struct timespec initial_time; + if (!handle) { + status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; + goto end; + } + if (handle->communication.state == COMMUNICATION_STATE_ERROR) { status = LTTNG_DESTRUCTION_HANDLE_STATUS_ERROR; goto end; @@ -329,6 +325,11 @@ lttng_destruction_handle_get_rotation_state( enum lttng_destruction_handle_status status = LTTNG_DESTRUCTION_HANDLE_STATUS_OK; + if (!handle || !rotation_state) { + status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; + goto end; + } + if (!handle->rotation_state.is_set) { status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; goto end; @@ -346,6 +347,11 @@ lttng_destruction_handle_get_archive_location( enum lttng_destruction_handle_status status = LTTNG_DESTRUCTION_HANDLE_STATUS_OK; + if (!handle || !location) { + status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; + goto end; + } + if (!handle->location) { status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; goto end; @@ -363,6 +369,11 @@ lttng_destruction_handle_get_result( enum lttng_destruction_handle_status status = LTTNG_DESTRUCTION_HANDLE_STATUS_OK; + if (!handle || !result) { + status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; + goto end; + } + if (!handle->destruction_return_code.is_set) { status = LTTNG_DESTRUCTION_HANDLE_STATUS_INVALID; goto end; @@ -384,6 +395,11 @@ enum lttng_error_code lttng_destroy_session_ext(const char *session_name, int sessiond_socket = -1; struct lttng_destruction_handle *handle = NULL; + if (!session_name) { + ret_code = LTTNG_ERR_INVALID; + goto error; + } + ret = lttng_strncpy(lsm.session.name, session_name, sizeof(lsm.session.name)); if (ret) { @@ -405,7 +421,7 @@ enum lttng_error_code lttng_destroy_session_ext(const char *session_name, goto error; } - comm_ret = lttcomm_send_unix_sock(sessiond_socket, &lsm, sizeof(lsm)); + comm_ret = lttcomm_send_creds_unix_sock(sessiond_socket, &lsm, sizeof(lsm)); if (comm_ret < 0) { ret_code = LTTNG_ERR_FATAL; goto error; @@ -420,7 +436,9 @@ enum lttng_error_code lttng_destroy_session_ext(const char *session_name, error: if (sessiond_socket >= 0) { ret = close(sessiond_socket); - PERROR("Failed to close the LTTng session daemon connection socket"); + if (ret < 0) { + PERROR("Failed to close the LTTng session daemon connection socket"); + } } if (handle) { lttng_destruction_handle_destroy(handle);