From b3b3271f4298bcd8e2449a1c0f56629ff94e86bf Mon Sep 17 00:00:00 2001 From: Jacob Kiesel Date: Thu, 19 Nov 2020 21:08:07 -0700 Subject: [PATCH] Fix pretty big bug --- futures-macro/src/stream_select.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/futures-macro/src/stream_select.rs b/futures-macro/src/stream_select.rs index 6806c2ec4c..6ca3959549 100644 --- a/futures-macro/src/stream_select.rs +++ b/futures-macro/src/stream_select.rs @@ -54,19 +54,23 @@ pub(crate) fn stream_select(input: TokenStream) -> TokenStream { let Self(#(ref mut #field_idents),*) = self.get_mut(); let mut future_array = [#(StreamFutures::#generic_idents(#field_idents.next())),*]; __futures_crate::async_await::shuffle(&mut future_array); - let mut any_polled = false; + let mut any_pending = false; for f in &mut future_array { if __futures_crate::future::FusedFuture::is_terminated(f) { continue; } else { - any_polled = true; - let r = __futures_crate::future::Future::poll(::std::pin::Pin::new(f), cx); - if r.is_ready() { - return r; + match __futures_crate::future::Future::poll(::std::pin::Pin::new(f), cx) { + r @ __futures_crate::task::Poll::Ready(Some(_)) => { + return r; + }, + __futures_crate::task::Poll::Pending => { + any_pending = true; + }, + __futures_crate::task::Poll::Ready(None) => {}, } } } - if any_polled { + if any_pending { __futures_crate::task::Poll::Pending } else { __futures_crate::task::Poll::Ready(None)