tests: Implement tests for lttng-ust LTTNG_UST_BLOCKING_RETRY_TIMEOUT
[lttng-tools.git] / src / common / index / index.c
index a00403420dc98f3ead4de96632995a7c07e01a28..066618e8bd1a70ea3a7bb7ebe9e2b4b76ece1cc1 100644 (file)
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <assert.h>
 #include <sys/stat.h>
 #include <sys/types.h>
@@ -24,6 +24,7 @@
 
 #include <common/common.h>
 #include <common/defaults.h>
+#include <common/compat/endian.h>
 #include <common/utils.h>
 
 #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)) {
This page took 0.024652 seconds and 4 git commands to generate.