From 9ee1b0f73ac8053df3468101e8473826ab3cccb4 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Mon, 31 Aug 2020 15:42:30 +0200 Subject: [PATCH] Simplify implementation based on review comments --- futures-util/src/stream/futures_ordered.rs | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/futures-util/src/stream/futures_ordered.rs b/futures-util/src/stream/futures_ordered.rs index a6e267ac69..5dbd4ae338 100644 --- a/futures-util/src/stream/futures_ordered.rs +++ b/futures-util/src/stream/futures_ordered.rs @@ -95,7 +95,6 @@ pub struct FuturesOrdered { queued_outputs: BinaryHeap>, next_incoming_index: usize, next_outgoing_index: usize, - is_terminated: bool, } impl Unpin for FuturesOrdered {} @@ -111,7 +110,6 @@ impl FuturesOrdered { queued_outputs: BinaryHeap::new(), next_incoming_index: 0, next_outgoing_index: 0, - is_terminated: false, } } @@ -142,10 +140,6 @@ impl FuturesOrdered { }; self.next_incoming_index += 1; self.in_progress_queue.push(wrapped); - - // Reset the `is_terminated` flag if we've previously marked ourselves - // as terminated. - self.is_terminated = false; } } @@ -182,12 +176,7 @@ impl Stream for FuturesOrdered { this.queued_outputs.push(output) } } - None => { - // We can only consider ourselves terminated once we - // have yielded a `None` - this.is_terminated = true; - return Poll::Ready(None); - }, + None => return Poll::Ready(None), } } } @@ -216,7 +205,7 @@ impl FromIterator for FuturesOrdered { impl FusedStream for FuturesOrdered { fn is_terminated(&self) -> bool { - self.is_terminated + self.in_progress_queue.is_terminated() && self.queued_outputs.is_empty() } }