Fix: data pending: allow empty streams
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 5 Jan 2015 02:25:08 +0000 (21:25 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 8 Jan 2015 17:13:56 +0000 (12:13 -0500)
There are cases where a stream can be completely empty (no packet to
write) with UST: for instance, if a traced application is either
preempted for a long time, terminated, or stopped, between reserve and
commit. This will make the consumer consider that this stream has no
data ready. If this situation occurs in the first sub-buffer of a
stream, this stream will have no data at all (0 bytes).

Therefore, we need to let the data pending check consider that no data
is pending in this situation, otherwise it can make the data pending
check always return that there is data pending.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/consumer.c

index f2662cddadd5e8d3b98d7ebcc4f7c386a8552c78..d192d7a5194cb6b439a33ebd68e38a2ce5560629 100644 (file)
@@ -3548,15 +3548,6 @@ int consumer_data_pending(uint64_t id)
                 */
                ret = cds_lfht_is_node_deleted(&stream->node.node);
                if (!ret) {
                 */
                ret = cds_lfht_is_node_deleted(&stream->node.node);
                if (!ret) {
-                       /*
-                        * An empty output file is not valid. We need at least one packet
-                        * generated per stream, even if it contains no event, so it
-                        * contains at least one packet header.
-                        */
-                       if (stream->output_written == 0) {
-                               pthread_mutex_unlock(&stream->lock);
-                               goto data_pending;
-                       }
                        /* Check the stream if there is data in the buffers. */
                        ret = data_pending(stream);
                        if (ret == 1) {
                        /* Check the stream if there is data in the buffers. */
                        ret = data_pending(stream);
                        if (ret == 1) {
This page took 0.026315 seconds and 4 git commands to generate.