- /* Create index directory if necessary. */
- ret = utils_mkdir(fullpath, S_IRWXU | S_IRWXG, uid, gid);
- if (ret < 0) {
- if (errno != EEXIST) {
- PERROR("Index trace directory creation error");
+ ret = utils_stream_file_path(index_directory_path, stream_name,
+ stream_file_size, stream_file_index,
+ DEFAULT_INDEX_FILE_SUFFIX,
+ index_file_path, sizeof(index_file_path));
+ if (ret) {
+ goto error;
+ }
+
+ if (unlink_existing_file) {
+ /*
+ * For tracefile rotation. We need to unlink the old
+ * file if present to synchronize with the tail of the
+ * live viewer which could be working on this same file.
+ * By doing so, any reference to the old index file
+ * stays valid even if we re-create a new file with the
+ * same name afterwards.
+ */
+ chunk_status = lttng_trace_chunk_unlink_file(
+ chunk, index_file_path);
+ if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK &&
+ !(chunk_status == LTTNG_TRACE_CHUNK_STATUS_ERROR &&
+ errno == ENOENT)) {