Revert "Use std::sync::Condvar (#1732)" (#9392)

* Revert "Use std::sync::Condvar (#1732)"

This reverts commit c65ee93542.

* verification_queue: remove redundant mutexes
This commit is contained in:
Andronik Ordian
2018-08-22 17:01:07 +03:00
committed by Marek Kotewicz
parent e12a26dac5
commit 491ce61a76
3 changed files with 29 additions and 34 deletions

View File

@@ -24,8 +24,7 @@ use crossbeam::sync::chase_lev;
use slab::Slab;
use {IoError, IoHandler};
use worker::{Worker, Work, WorkType};
use parking_lot::{RwLock, Mutex};
use std::sync::{Condvar as SCondvar, Mutex as SMutex};
use parking_lot::{Condvar, RwLock, Mutex};
use std::time::Duration;
/// Timer ID
@@ -186,7 +185,7 @@ pub struct IoManager<Message> where Message: Send + Sync {
handlers: Arc<RwLock<Slab<Arc<IoHandler<Message>>>>>,
workers: Vec<Worker>,
worker_channel: chase_lev::Worker<Work<Message>>,
work_ready: Arc<SCondvar>,
work_ready: Arc<Condvar>,
}
impl<Message> IoManager<Message> where Message: Send + Sync + 'static {
@@ -197,8 +196,8 @@ impl<Message> IoManager<Message> where Message: Send + Sync + 'static {
) -> Result<(), IoError> {
let (worker, stealer) = chase_lev::deque();
let num_workers = 4;
let work_ready_mutex = Arc::new(SMutex::new(()));
let work_ready = Arc::new(SCondvar::new());
let work_ready_mutex = Arc::new(Mutex::new(()));
let work_ready = Arc::new(Condvar::new());
let workers = (0..num_workers).map(|i|
Worker::new(
i,

View File

@@ -22,7 +22,7 @@ use service_mio::{HandlerId, IoChannel, IoContext};
use IoHandler;
use LOCAL_STACK_SIZE;
use std::sync::{Condvar as SCondvar, Mutex as SMutex};
use parking_lot::{Condvar, Mutex};
const STACK_SIZE: usize = 16*1024*1024;
@@ -45,9 +45,9 @@ pub struct Work<Message> {
/// Sorts them ready for blockchain insertion.
pub struct Worker {
thread: Option<JoinHandle<()>>,
wait: Arc<SCondvar>,
wait: Arc<Condvar>,
deleting: Arc<AtomicBool>,
wait_mutex: Arc<SMutex<()>>,
wait_mutex: Arc<Mutex<()>>,
}
impl Worker {
@@ -55,8 +55,8 @@ impl Worker {
pub fn new<Message>(index: usize,
stealer: chase_lev::Stealer<Work<Message>>,
channel: IoChannel<Message>,
wait: Arc<SCondvar>,
wait_mutex: Arc<SMutex<()>>,
wait: Arc<Condvar>,
wait_mutex: Arc<Mutex<()>>,
) -> Worker
where Message: Send + Sync + 'static {
let deleting = Arc::new(AtomicBool::new(false));
@@ -76,17 +76,17 @@ impl Worker {
}
fn work_loop<Message>(stealer: chase_lev::Stealer<Work<Message>>,
channel: IoChannel<Message>, wait: Arc<SCondvar>,
wait_mutex: Arc<SMutex<()>>,
channel: IoChannel<Message>, wait: Arc<Condvar>,
wait_mutex: Arc<Mutex<()>>,
deleting: Arc<AtomicBool>)
where Message: Send + Sync + 'static {
loop {
{
let lock = wait_mutex.lock().expect("Poisoned work_loop mutex");
let mut lock = wait_mutex.lock();
if deleting.load(AtomicOrdering::Acquire) {
return;
}
let _ = wait.wait(lock);
wait.wait(&mut lock);
}
while !deleting.load(AtomicOrdering::Acquire) {
@@ -122,7 +122,7 @@ impl Worker {
impl Drop for Worker {
fn drop(&mut self) {
trace!(target: "shutdown", "[IoWorker] Closing...");
let _ = self.wait_mutex.lock().expect("Poisoned work_loop mutex");
let _ = self.wait_mutex.lock();
self.deleting.store(true, AtomicOrdering::Release);
self.wait.notify_all();
if let Some(thread) = self.thread.take() {