use std::thread::JoinHandle;
use massa_channel::sender::MassaSender;
use massa_factory_exports::FactoryManager;
use tracing::{info, warn};
pub struct FactoryManagerImpl {
pub(crate) block_worker: Option<(MassaSender<()>, JoinHandle<()>)>,
pub(crate) endorsement_worker: Option<(MassaSender<()>, JoinHandle<()>)>,
}
impl FactoryManager for FactoryManagerImpl {
fn stop(&mut self) {
info!("stopping factory...");
if let Some((chan_tx, join_handle)) = self.block_worker.take() {
std::mem::drop(chan_tx);
if let Err(err) = join_handle.join() {
warn!("block factory worker panicked: {:?}", err);
}
}
if let Some((chan_tx, join_handle)) = self.endorsement_worker.take() {
std::mem::drop(chan_tx);
if let Err(err) = join_handle.join() {
warn!("endorsement factory worker panicked: {:?}", err);
}
}
info!("factory stopped");
}
}