Fix: Consumer return value check after mmap/splice
[lttng-tools.git] / src / common / ust-consumer / ust-consumer.c
index e7d6dd4e780084879759055fe839e018f6d02048..8ab2b819dcee52a237518b1ce6f8cba5f3e1aa1f 100644 (file)
@@ -452,12 +452,20 @@ int lttng_ustconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
        padding = len - subbuf_size;
        /* write the subbuffer to the tracefile */
        ret = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, subbuf_size, padding);
        padding = len - subbuf_size;
        /* write the subbuffer to the tracefile */
        ret = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, subbuf_size, padding);
-       if (ret != subbuf_size) {
+       /*
+        * The mmap operation should write subbuf_size amount of data when network
+        * streaming or the full padding (len) size when we are _not_ streaming.
+        */
+       if ((ret != subbuf_size && stream->net_seq_idx != -1) ||
+                       (ret != len && stream->net_seq_idx == -1)) {
                /*
                /*
-                * display the error but continue processing to try
-                * to release the subbuffer
+                * Display the error but continue processing to try to release the
+                * subbuffer
                 */
                 */
-               ERR("Error writing to tracefile (expected: %ld, got: %ld)", ret, len);
+               ERR("Error writing to tracefile "
+                               "(ret: %zd != len: %lu != subbuf_size: %lu)",
+                               ret, len, subbuf_size);
+
        }
        err = ustctl_put_next_subbuf(handle, buf);
        assert(err == 0);
        }
        err = ustctl_put_next_subbuf(handle, buf);
        assert(err == 0);
This page took 0.023219 seconds and 4 git commands to generate.