diff --git a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs index e366adc5facbb4f62c8586a03a89f9c2120932cd..a4000e626ab8a9a79ec563fe8caa94e9b7b3d093 100644 --- a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs +++ b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs @@ -160,10 +160,11 @@ impl Participation { &mut self, ctx: &mut Context, priority: ParticipationPriority, - req: ParticipationRequest, + mut req: ParticipationRequest, ) -> Result<()> { - // Participation already running - we can ignore that request: + // Participation already running - we can ignore that request, discarding its timer: if self.running_participations.contains(req.candidate_hash()) { + req.discard_timer(); return Ok(()) } // Available capacity - participate right away (if we already have a recent block): diff --git a/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs index a5a5ab962f5a441e4e30619a5ef1cc438aa70314..01950973e054b260eb2461e465e6120048387f5c 100644 --- a/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs +++ b/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs @@ -134,6 +134,11 @@ impl ParticipationRequest { pub fn session(&self) -> SessionIndex { self.session } + pub fn discard_timer(&mut self) { + if let Some(timer) = self.request_timer.take() { + timer.stop_and_discard(); + } + } pub fn into_candidate_info(self) -> (CandidateHash, CandidateReceipt) { let Self { candidate_hash, candidate_receipt, .. } = self; (candidate_hash, candidate_receipt) @@ -246,17 +251,12 @@ impl Queues { // Remove any best effort entry, using it to replace our new // request. if let Some(older_request) = self.best_effort.remove(&comparator) { - if let Some(timer) = req.request_timer { - timer.stop_and_discard(); - } + req.discard_timer(); req = older_request; } // Keeping old request if any. match self.priority.entry(comparator) { - Entry::Occupied(_) => - if let Some(timer) = req.request_timer { - timer.stop_and_discard(); - }, + Entry::Occupied(_) => req.discard_timer(), Entry::Vacant(vac) => { vac.insert(req); }, @@ -274,10 +274,7 @@ impl Queues { } // Keeping old request if any. match self.best_effort.entry(comparator) { - Entry::Occupied(_) => - if let Some(timer) = req.request_timer { - timer.stop_and_discard(); - }, + Entry::Occupied(_) => req.discard_timer(), Entry::Vacant(vac) => { vac.insert(req); },