Fix: lazy-mmap() streams when flushing
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 28 Jan 2015 22:07:35 +0000 (17:07 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 28 Jan 2015 22:07:35 +0000 (17:07 -0500)
This fixes an issue when empty streams are created as the stream
creation will mmap() the file in preparation for the first event.

This results in "empty" stream files ending up with a non-zero size
which is invalid since no packet headers are found by the reader.

This change ensures that stream files are only mmap'ed on the first
stream flush and that empty streams are stored as size-0 files.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
formats/ctf/ctf.c
formats/ctf/ir/stream.c

index 40da01da2d57619d1257fc42a4666923afaaeaa2..5436c2a72b9e6b65812b0105f5faf28131822ac9 100644 (file)
@@ -768,8 +768,6 @@ int ctf_init_pos(struct ctf_stream_pos *pos, struct bt_trace_descriptor *trace,
                pos->parent.rw_table = write_dispatch_table;
                pos->parent.event_cb = ctf_write_event;
                pos->parent.trace = trace;
-               if (fd >= 0)
-                       ctf_packet_seek(&pos->parent, 0, SEEK_SET);     /* position for write */
                break;
        default:
                assert(0);
index 6a71466ca3a60022a178b684b43508e4bed6a5be..1d14abd69a76ba2de62c8bd320553b493f1c70ce 100644 (file)
@@ -702,10 +702,8 @@ int bt_ctf_stream_flush(struct bt_ctf_stream *stream)
                goto end;
        }
 
-       if (stream->flushed_packet_count) {
-               /* ctf_init_pos has already initialized the first packet */
-               ctf_packet_seek(&stream->pos.parent, 0, SEEK_CUR);
-       }
+       /* mmap the next packet */
+       ctf_packet_seek(&stream->pos.parent, 0, SEEK_CUR);
 
        ret = bt_ctf_field_serialize(stream->packet_header, &stream->pos);
        if (ret) {
This page took 0.026343 seconds and 4 git commands to generate.