From 743a96e7739a6aeadb656c813e2afa948f5cc459 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Thu, 5 Jul 2018 16:29:49 -0600 Subject: [PATCH] Remove exit variable from ReplicateStage --- src/replicate_stage.rs | 15 +++++++++------ src/tvu.rs | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/replicate_stage.rs b/src/replicate_stage.rs index 661edf60e5973a..68fa7f94df0070 100644 --- a/src/replicate_stage.rs +++ b/src/replicate_stage.rs @@ -2,9 +2,9 @@ use bank::Bank; use ledger; -use result::Result; +use result::{Error, Result}; use service::Service; -use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::mpsc::RecvTimeoutError; use std::sync::Arc; use std::thread::{self, Builder, JoinHandle}; use std::time::Duration; @@ -29,13 +29,16 @@ impl ReplicateStage { Ok(()) } - pub fn new(bank: Arc, exit: Arc, window_receiver: BlobReceiver) -> Self { + pub fn new(bank: Arc, window_receiver: BlobReceiver) -> Self { let thread_hdl = Builder::new() .name("solana-replicate-stage".to_string()) .spawn(move || loop { - let e = Self::replicate_requests(&bank, &window_receiver); - if e.is_err() && exit.load(Ordering::Relaxed) { - break; + if let Err(e) = Self::replicate_requests(&bank, &window_receiver) { + match e { + Error::RecvTimeoutError(RecvTimeoutError::Disconnected) => break, + Error::RecvTimeoutError(RecvTimeoutError::Timeout) => (), + _ => error!("{:?}", e), + } } }) .unwrap(); diff --git a/src/tvu.rs b/src/tvu.rs index aaf87f1e391973..77330a1fefe1e5 100644 --- a/src/tvu.rs +++ b/src/tvu.rs @@ -94,7 +94,7 @@ impl Tvu { blob_receiver, ); - let replicate_stage = ReplicateStage::new(bank, exit, blob_receiver); + let replicate_stage = ReplicateStage::new(bank, blob_receiver); Tvu { replicate_stage,