diff --git a/ethcore/src/engines/clique/mod.rs b/ethcore/src/engines/clique/mod.rs index 38a27e58dcc..f29d5893693 100644 --- a/ethcore/src/engines/clique/mod.rs +++ b/ethcore/src/engines/clique/mod.rs @@ -168,7 +168,7 @@ pub struct Clique { block_state_by_hash: RwLock>, proposals: RwLock>, signer: RwLock>>, - step_service: Option>, + step_service: Option, } #[cfg(test)] @@ -181,7 +181,7 @@ pub struct Clique { pub block_state_by_hash: RwLock>, pub proposals: RwLock>, pub signer: RwLock>>, - pub step_service: Option>, + pub step_service: Option, } impl Clique { @@ -745,10 +745,10 @@ impl Engine for Clique { } fn stop(&mut self) { - if let Some(mut s) = self.step_service.as_mut() { - Arc::get_mut(&mut s).map(|x| x.stop()); + if let Some(step_service) = self.step_service.as_mut() { + step_service.stop(); } else { - warn!(target: "engine", "Stopping `CliqueStepService` failed requires mutable access"); + warn!(target: "engine", "Attempted to stop StepService but it does nothing; no step service registered"); } } diff --git a/ethcore/src/engines/clique/step_service.rs b/ethcore/src/engines/clique/step_service.rs index 7a4b5269d2b..aab78d7fd0f 100644 --- a/ethcore/src/engines/clique/step_service.rs +++ b/ethcore/src/engines/clique/step_service.rs @@ -32,7 +32,7 @@ pub struct StepService { impl StepService { /// Start the `StepService` - pub fn start(engine: Weak>) -> Arc { + pub fn start(engine: Weak>) -> Self { let shutdown = Arc::new(AtomicBool::new(false)); let s = shutdown.clone(); @@ -60,10 +60,10 @@ impl StepService { trace!(target: "miner", "CliqueStepService: shutdown."); }).expect("CliqueStepService thread failed"); - Arc::new(StepService { + StepService { shutdown: s, thread: Some(thread), - }) + } } /// Stop the `StepService`