#include <common/dynamic-array.h>
#include <common/error.h>
#include <common/fd-tracker/fd-tracker.h>
+#include <common/fd-tracker/utils.h>
#include <common/fs-handle-internal.h>
#include <common/hashtable/hashtable.h>
#include <common/hashtable/utils.h>
goto skip_move;
}
- if (old_path[0] != '\0' && path[0] != '\0') {
+ if (old_path && old_path[0] != '\0' && path[0] != '\0') {
/* Rename chunk directory. */
ret = lttng_directory_handle_rename_as_user(
chunk->session_output_directory,
status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
goto end;
}
- rename_directory = lttng_directory_handle_create_from_handle(
- path,
- chunk->session_output_directory);
+ rename_directory = chunk->fd_tracker ?
+ fd_tracker_create_directory_handle_from_handle(
+ chunk->fd_tracker,
+ chunk->session_output_directory,
+ path) :
+ lttng_directory_handle_create_from_handle(
+ path,
+ chunk->session_output_directory);
if (!rename_directory) {
ERR("Failed to get handle to trace chunk rename directory");
status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
*/
chunk->chunk_directory = rename_directory;
rename_directory = NULL;
- } else if (old_path[0] == '\0') {
+ } else if (old_path && old_path[0] == '\0') {
size_t i, count = lttng_dynamic_pointer_array_get_count(
&chunk->top_level_directories);
*/
chunk->chunk_directory = rename_directory;
rename_directory = NULL;
- } else {
+ } else if (old_path) {
size_t i, count = lttng_dynamic_pointer_array_get_count(
&chunk->top_level_directories);
const bool reference_acquired = lttng_directory_handle_get(
if (status != LTTNG_TRACE_CHUNK_STATUS_OK) {
ERR("Error removing subdirectory '%s' file when deleting chunk",
old_path);
- ret = -1;
goto end;
}
+ } else {
+ /* Unexpected !old_path && !path. */
+ status = LTTNG_TRACE_CHUNK_STATUS_INVALID_ARGUMENT;
+ goto end;
}
skip_move:
- if (path) {
- new_path = strdup(path);
- if (!new_path) {
- ERR("Failed to allocate new trace chunk path");
- status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
- goto end;
- }
- } else {
- new_path = NULL;
+ new_path = strdup(path);
+ if (!new_path) {
+ ERR("Failed to allocate new trace chunk path");
+ status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
+ goto end;
}
free(chunk->path);
chunk->path = new_path;
goto end;
}
chunk_directory_handle =
- lttng_directory_handle_create_from_handle(
- chunk->path,
- session_output_directory);
+ chunk->fd_tracker ?
+ fd_tracker_create_directory_handle_from_handle(
+ chunk->fd_tracker,
+ session_output_directory,
+ chunk->path) :
+ lttng_directory_handle_create_from_handle(
+ chunk->path,
+ session_output_directory);
if (!chunk_directory_handle) {
/* The function already logs on all error paths. */
status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
goto end;
}
- archived_chunks_directory = lttng_directory_handle_create_from_handle(
- DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY,
- trace_chunk->session_output_directory);
+ archived_chunks_directory = trace_chunk->fd_tracker ?
+ fd_tracker_create_directory_handle_from_handle(
+ trace_chunk->fd_tracker,
+ trace_chunk->session_output_directory,
+ DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY) :
+ lttng_directory_handle_create_from_handle(
+ DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY,
+ trace_chunk->session_output_directory);
if (!archived_chunks_directory) {
PERROR("Failed to get handle to archived trace chunks directory");
ret = -1;