diff --git a/validation/src/lib.rs b/validation/src/lib.rs index f77aa79f3b8a5..915ac290272d1 100644 --- a/validation/src/lib.rs +++ b/validation/src/lib.rs @@ -835,7 +835,13 @@ impl futures03::Future for CreateProposal where data }, - CreateProposalState::Switching => return Poll::Pending, + CreateProposalState::Switching => + unreachable!( + "State Switching are only created on call, \ + and immediately swapped out; \ + the data being read is from state; \ + thus Switching will never be reachable here; qed" + ), CreateProposalState::Fired(mut future) => { let ret = Pin::new(&mut future).poll(cx); self.state = CreateProposalState::Fired(future); @@ -844,17 +850,14 @@ impl futures03::Future for CreateProposal where }; // 2. propose - let future = tokio_executor::blocking::run(move || { + let mut future = tokio_executor::blocking::run(move || { let proposed_candidates = data.table.proposed_set(); data.propose_with(proposed_candidates) }); + let polled = Pin::new(&mut future).poll(cx); self.state = CreateProposalState::Fired(future); - match &mut self.state { - CreateProposalState::Fired(future) => Pin::new(future).poll(cx), - CreateProposalState::Switching | CreateProposalState::Pending(_) => - Poll::Pending, - } + polled } }