X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Findex%2Findex.c;h=46f8bcb1f02bfcb185782d65bb5e77fa8c4720cc;hb=7591bab11eceedc6a0d1e02fd6f85592267a63b5;hp=a462a635e78dfff933efc4dcec1253ceca37f552;hpb=f263b7fd113e51d0737554e8232b8669e142a260;p=lttng-tools.git diff --git a/src/common/index/index.c b/src/common/index/index.c index a462a635e..46f8bcb1f 100644 --- a/src/common/index/index.c +++ b/src/common/index/index.c @@ -17,6 +17,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -50,7 +51,7 @@ 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) { PERROR("Index trace directory creation error"); @@ -58,6 +59,19 @@ int index_create_file(char *path_name, char *stream_name, int uid, int gid, } } + /* + * 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) {