diff --git a/polkadot/node/core/proposer/src/lib.rs b/polkadot/node/core/proposer/src/lib.rs index 813d937a70..48971ad074 100644 --- a/polkadot/node/core/proposer/src/lib.rs +++ b/polkadot/node/core/proposer/src/lib.rs @@ -141,20 +141,23 @@ where let mut overseer = self.overseer.clone(); let parent_header_hash = self.parent_header_hash.clone(); - let (sender, receiver) = futures::channel::oneshot::channel(); + let pid = async { + let (sender, receiver) = futures::channel::oneshot::channel(); + overseer.wait_for_activation(parent_header_hash, sender).await; + receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)??; - overseer.wait_for_activation(parent_header_hash, sender).await; - receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)??; + let (sender, receiver) = futures::channel::oneshot::channel(); + overseer.send_msg(AllMessages::Provisioner( + ProvisionerMessage::RequestInherentData(parent_header_hash, sender), + )).await; - let (sender, receiver) = futures::channel::oneshot::channel(); - overseer.send_msg(AllMessages::Provisioner( - ProvisionerMessage::RequestInherentData(parent_header_hash, sender), - )).await; + receiver.await.map_err(|_| Error::ClosedChannelAwaitingInherentData) + }; let mut timeout = futures_timer::Delay::new(PROPOSE_TIMEOUT).fuse(); select! { - pid = receiver.fuse() => pid.map_err(|_| Error::ClosedChannelAwaitingInherentData), + pid = pid.fuse() => pid, _ = timeout => Err(Error::Timeout), } }