Limit sticky mutex to WriteStage

This commit is contained in:
Greg Fitzgerald 2018-07-01 10:55:16 -07:00 committed by Greg Fitzgerald
parent 17de79a83a
commit 56e37ad2f4
2 changed files with 17 additions and 14 deletions

View File

@ -34,7 +34,7 @@ use sigverify_stage::SigVerifyStage;
use std::io::Write; use std::io::Write;
use std::net::UdpSocket; use std::net::UdpSocket;
use std::sync::atomic::AtomicBool; use std::sync::atomic::AtomicBool;
use std::sync::{Arc, Mutex}; use std::sync::Arc;
use std::thread::JoinHandle; use std::thread::JoinHandle;
use std::time::Duration; use std::time::Duration;
use streamer::BlobReceiver; use streamer::BlobReceiver;
@ -81,7 +81,7 @@ impl Tpu {
bank.clone(), bank.clone(),
exit.clone(), exit.clone(),
blob_recycler.clone(), blob_recycler.clone(),
Mutex::new(writer), writer,
record_stage.entry_receiver, record_stage.entry_receiver,
); );
let mut thread_hdls = vec![ let mut thread_hdls = vec![

View File

@ -49,24 +49,27 @@ impl WriteStage {
bank: Arc<Bank>, bank: Arc<Bank>,
exit: Arc<AtomicBool>, exit: Arc<AtomicBool>,
blob_recycler: BlobRecycler, blob_recycler: BlobRecycler,
writer: Mutex<W>, writer: W,
entry_receiver: Receiver<Vec<Entry>>, entry_receiver: Receiver<Vec<Entry>>,
) -> Self { ) -> Self {
let (blob_sender, blob_receiver) = channel(); let (blob_sender, blob_receiver) = channel();
let thread_hdl = Builder::new() let thread_hdl = Builder::new()
.name("solana-writer".to_string()) .name("solana-writer".to_string())
.spawn(move || loop { .spawn(move || {
let entry_writer = EntryWriter::new(&bank); let entry_writer = EntryWriter::new(&bank);
let _ = Self::write_and_send_entries( let writer = Mutex::new(writer);
&entry_writer, loop {
&blob_sender, let _ = Self::write_and_send_entries(
&blob_recycler, &entry_writer,
&writer, &blob_sender,
&entry_receiver, &blob_recycler,
); &writer,
if exit.load(Ordering::Relaxed) { &entry_receiver,
info!("broadcat_service exiting"); );
break; if exit.load(Ordering::Relaxed) {
info!("broadcat_service exiting");
break;
}
} }
}) })
.unwrap(); .unwrap();