X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Findex%2Findex.c;h=066618e8bd1a70ea3a7bb7ebe9e2b4b76ece1cc1;hp=a00403420dc98f3ead4de96632995a7c07e01a28;hb=de7e372efecc2cf51921f2ac5a657337e04a39d3;hpb=6347a8b5c62a93c52cb11a68598068abb85ad930 diff --git a/src/common/index/index.c b/src/common/index/index.c index a00403420..066618e8b 100644 --- a/src/common/index/index.c +++ b/src/common/index/index.c @@ -16,7 +16,7 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -24,6 +24,7 @@ #include #include +#include #include #include "index.h" @@ -49,14 +50,27 @@ int index_create_file(char *path_name, char *stream_name, int uid, int gid, } /* Create index directory if necessary. */ - ret = run_as_mkdir(fullpath, S_IRWXU | S_IRWXG, uid, gid); + ret = utils_mkdir(fullpath, S_IRWXU | S_IRWXG, uid, gid); if (ret < 0) { - if (ret != -EEXIST) { + if (errno != EEXIST) { PERROR("Index trace directory creation error"); goto error; } } + /* + * 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. + */ + ret = utils_unlink_stream_file(fullpath, stream_name, size, count, uid, + gid, DEFAULT_INDEX_FILE_SUFFIX); + if (ret < 0 && errno != ENOENT) { + goto error; + } ret = utils_create_stream_file(fullpath, stream_name, size, count, uid, gid, DEFAULT_INDEX_FILE_SUFFIX); if (ret < 0) { @@ -67,7 +81,7 @@ int index_create_file(char *path_name, char *stream_name, int uid, int gid, hdr.magic = htobe32(CTF_INDEX_MAGIC); hdr.index_major = htobe32(CTF_INDEX_MAJOR); hdr.index_minor = htobe32(CTF_INDEX_MINOR); - hdr.packet_index_len = sizeof(struct ctf_packet_index); + hdr.packet_index_len = htobe32(sizeof(struct ctf_packet_index)); size_ret = lttng_write(fd, &hdr, sizeof(hdr)); if (size_ret < sizeof(hdr)) {