From c86245751eb7a32ae4cd29dead838129d6c6abb7 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sun, 21 Oct 2018 23:08:08 +0300 Subject: [PATCH] Remove unneeded locking from MempoolStore --- src/mempool.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/mempool.rs b/src/mempool.rs index 0658936..4c994cd 100644 --- a/src/mempool.rs +++ b/src/mempool.rs @@ -4,7 +4,7 @@ use hex; use std::collections::{BTreeMap, HashMap, HashSet}; use std::iter::FromIterator; use std::ops::Bound; -use std::sync::{Mutex, RwLock}; +use std::sync::Mutex; use daemon::{Daemon, MempoolEntry}; use index::index_transaction; @@ -17,34 +17,33 @@ use errors::*; const VSIZE_BIN_WIDTH: u32 = 100_000; // in vbytes struct MempoolStore { - map: RwLock>>, + map: BTreeMap>, } impl MempoolStore { fn new() -> MempoolStore { MempoolStore { - map: RwLock::new(BTreeMap::new()), + map: BTreeMap::new(), } } fn add(&mut self, tx: &Transaction) { - let mut map = self.map.write().unwrap(); let mut rows = vec![]; index_transaction(tx, 0, &mut rows); for row in rows { let (key, value) = row.into_pair(); - map.entry(key).or_insert(vec![]).push(value); + self.map.entry(key).or_insert(vec![]).push(value); } } fn remove(&mut self, tx: &Transaction) { - let mut map = self.map.write().unwrap(); let mut rows = vec![]; index_transaction(tx, 0, &mut rows); for row in rows { let (key, value) = row.into_pair(); let no_values_left = { - let values = map + let values = self + .map .get_mut(&key) .expect(&format!("missing key {} in mempool", hex::encode(&key))); let last_value = values @@ -61,7 +60,7 @@ impl MempoolStore { values.is_empty() }; if no_values_left { - map.remove(&key).unwrap(); + self.map.remove(&key).unwrap(); } } } @@ -69,12 +68,12 @@ impl MempoolStore { impl ReadStore for MempoolStore { fn get(&self, key: &[u8]) -> Option { - let map = self.map.read().unwrap(); - Some(map.get(key)?.last()?.to_vec()) + Some(self.map.get(key)?.last()?.to_vec()) } fn scan(&self, prefix: &[u8]) -> Vec { - let map = self.map.read().unwrap(); - let range = map.range((Bound::Included(prefix.to_vec()), Bound::Unbounded)); + let range = self + .map + .range((Bound::Included(prefix.to_vec()), Bound::Unbounded)); let mut rows = vec![]; for (key, values) in range { if !key.starts_with(prefix) {