X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fiterator.c;h=48c67a4031fb07167d61233a17b66b11f58df964;hb=bd11ed5bddf45f790ef6fd52effdaf80ef625282;hp=a2a7bb578adca29313b9bda620382bfe67b8248c;hpb=024e61817685a20caceb4e3ef3bdc019a7af6b6e;p=babeltrace.git diff --git a/lib/iterator.c b/lib/iterator.c index a2a7bb57..48c67a40 100644 --- a/lib/iterator.c +++ b/lib/iterator.c @@ -806,9 +806,18 @@ int bt_iter_next(struct bt_iter *iter) goto end; } else if (ret == EAGAIN) { /* - * The stream is inactive for now, we just updated the timestamp_end - * to skip over this stream up to a certain point in time. + * Live streaming: the stream is inactive for now, we + * just updated the timestamp_end to skip over this + * stream up to a certain point in time. + * + * Since we can't guarantee that a stream will ever have + * any activity, we can't rely on the fact that + * bt_iter_next will be called for each stream and deal + * with inactive streams. So instead, we return 0 here + * to the caller and let the read API handle the + * retry case. */ + ret = 0; goto reinsert; } else if (ret) { goto end; @@ -818,14 +827,6 @@ reinsert: /* Reinsert the file stream into the heap, and rebalance. */ removed = bt_heap_replace_max(iter->stream_heap, file_stream); assert(removed == file_stream); - - file_stream = bt_heap_maximum(iter->stream_heap); - if (file_stream->pos.content_size == 0) { - ret = EAGAIN; - } else { - ret = 0; - } - end: return ret; }