diff --git a/src/chainstate/coordinator/mod.rs b/src/chainstate/coordinator/mod.rs index aa9eae266..d1c16d6e8 100644 --- a/src/chainstate/coordinator/mod.rs +++ b/src/chainstate/coordinator/mod.rs @@ -19,6 +19,8 @@ use std::convert::{TryFrom, TryInto}; use std::fs; use std::path::PathBuf; use std::sync::mpsc::SyncSender; +use std::sync::Arc; +use std::sync::Mutex; use std::time::Duration; use crate::burnchains::{ @@ -39,6 +41,7 @@ use crate::chainstate::stacks::{ StacksHeaderInfo, }, events::{StacksTransactionEvent, StacksTransactionReceipt, TransactionOrigin}, + miner::{signal_mining_blocked, signal_mining_ready, MinerStatus}, Error as ChainstateError, StacksBlock, TransactionPayload, }; use crate::core::StacksEpoch; @@ -272,6 +275,7 @@ impl<'a, T: BlockEventDispatcher, CE: CostEstimator + ?Sized, FE: FeeEstimator + atlas_config: AtlasConfig, cost_estimator: Option<&mut CE>, fee_estimator: Option<&mut FE>, + miner_status: Arc>, ) where T: BlockEventDispatcher, { @@ -311,18 +315,23 @@ impl<'a, T: BlockEventDispatcher, CE: CostEstimator + ?Sized, FE: FeeEstimator + // timeout so that we handle Ctrl-C a little gracefully match comms.wait_on() { CoordinatorEvents::NEW_STACKS_BLOCK => { + signal_mining_blocked(miner_status.clone()); debug!("Received new stacks block notice"); if let Err(e) = inst.handle_new_stacks_block() { warn!("Error processing new stacks block: {:?}", e); } + signal_mining_ready(miner_status.clone()); } CoordinatorEvents::NEW_BURN_BLOCK => { + signal_mining_blocked(miner_status.clone()); debug!("Received new burn block notice"); if let Err(e) = inst.handle_new_burnchain_block() { warn!("Error processing new burn block: {:?}", e); } + signal_mining_ready(miner_status.clone()); } CoordinatorEvents::STOP => { + signal_mining_blocked(miner_status.clone()); debug!("Received stop notice"); return; }