/*
- * Copyright (C) 2019 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ * Copyright (C) 2019 Jérémie Galarneau <jeremie.galarneau@efficios.com>
*
- * 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 <lttng/destruction-handle.h>
}
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);
}
ret = -1;
break;
} else {
+ /* Ownership is transferred to the destruction handle. */
handle->location = location;
handle->communication.state = COMMUNICATION_STATE_END;
}
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;
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;
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;
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;
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) {
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);