From 6cde480c292ca023caf279435edf13ff6ebfb64a Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Tue, 27 Nov 2018 19:13:34 +0100 Subject: [PATCH] Fix Transport::and_then (#690) --- core/src/transport/and_then.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/src/transport/and_then.rs b/core/src/transport/and_then.rs index 48c66be6..eec9fea3 100644 --- a/core/src/transport/and_then.rs +++ b/core/src/transport/and_then.rs @@ -149,16 +149,18 @@ where type Error = T::Error; fn poll(&mut self) -> Poll { - let future = match self.inner { - Either::A(ref mut future) => { - let item = try_ready!(future.poll()); - let (f, a) = self.args.take().expect("AndThenFuture has already finished."); - f(item, a).into_future() - } - Either::B(ref mut future) => return future.poll() - }; - self.inner = Either::B(future); - Ok(Async::NotReady) + loop { + let future = match self.inner { + Either::A(ref mut future) => { + let item = try_ready!(future.poll()); + let (f, a) = self.args.take().expect("AndThenFuture has already finished."); + f(item, a).into_future() + } + Either::B(ref mut future) => return future.poll() + }; + + self.inner = Either::B(future); + } } }