proposer: guard all provisioner data work with timeout (#2026)

This commit is contained in:
André Silva
2020-11-27 18:39:22 +00:00
committed by GitHub
parent 0a79d663e4
commit 700b40679c
+11 -8
View File
@@ -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),
}
}