Place Sync/Send in trait.

This commit is contained in:
Gav Wood 2016-03-11 13:19:10 +01:00
parent e461916f5a
commit d71c5d4c17
5 changed files with 17 additions and 17 deletions

View File

@ -171,7 +171,7 @@ pub struct SealedBlock {
impl<'x> OpenBlock<'x> { impl<'x> OpenBlock<'x> {
/// Create a new OpenBlock ready for transaction pushing. /// Create a new OpenBlock ready for transaction pushing.
pub fn new(engine: &'x Engine, db: Box<JournalDB + Send>, parent: &Header, last_hashes: LastHashes, author: Address, extra_data: Bytes) -> Self { pub fn new(engine: &'x Engine, db: Box<Box<JournalDB>>, parent: &Header, last_hashes: LastHashes, author: Address, extra_data: Bytes) -> Self {
let mut r = OpenBlock { let mut r = OpenBlock {
block: ExecutedBlock::new(State::from_existing(db, parent.state_root().clone(), engine.account_start_nonce())), block: ExecutedBlock::new(State::from_existing(db, parent.state_root().clone(), engine.account_start_nonce())),
engine: engine, engine: engine,
@ -317,7 +317,7 @@ impl ClosedBlock {
} }
/// Drop this object and return the underlieing database. /// Drop this object and return the underlieing database.
pub fn drain(self) -> Box<JournalDB + Send> { self.block.state.drop().1 } pub fn drain(self) -> Box<Box<JournalDB>> { self.block.state.drop().1 }
} }
impl SealedBlock { impl SealedBlock {
@ -331,7 +331,7 @@ impl SealedBlock {
} }
/// Drop this object and return the underlieing database. /// Drop this object and return the underlieing database.
pub fn drain(self) -> Box<JournalDB + Send> { self.block.state.drop().1 } pub fn drain(self) -> Box<Box<JournalDB>> { self.block.state.drop().1 }
} }
impl IsBlock for SealedBlock { impl IsBlock for SealedBlock {
@ -339,7 +339,7 @@ impl IsBlock for SealedBlock {
} }
/// Enact the block given by block header, transactions and uncles /// Enact the block given by block header, transactions and uncles
pub fn enact(header: &Header, transactions: &[SignedTransaction], uncles: &[Header], engine: &Engine, db: Box<JournalDB + Send>, parent: &Header, last_hashes: LastHashes) -> Result<ClosedBlock, Error> { pub fn enact(header: &Header, transactions: &[SignedTransaction], uncles: &[Header], engine: &Engine, db: Box<Box<JournalDB>>, parent: &Header, last_hashes: LastHashes) -> Result<ClosedBlock, Error> {
{ {
if ::log::max_log_level() >= ::log::LogLevel::Trace { if ::log::max_log_level() >= ::log::LogLevel::Trace {
let s = State::from_existing(db.spawn(), parent.state_root().clone(), engine.account_start_nonce()); let s = State::from_existing(db.spawn(), parent.state_root().clone(), engine.account_start_nonce());
@ -357,20 +357,20 @@ pub fn enact(header: &Header, transactions: &[SignedTransaction], uncles: &[Head
} }
/// Enact the block given by `block_bytes` using `engine` on the database `db` with given `parent` block header /// Enact the block given by `block_bytes` using `engine` on the database `db` with given `parent` block header
pub fn enact_bytes(block_bytes: &[u8], engine: &Engine, db: Box<JournalDB + Send>, parent: &Header, last_hashes: LastHashes) -> Result<ClosedBlock, Error> { pub fn enact_bytes(block_bytes: &[u8], engine: &Engine, db: Box<Box<JournalDB>>, parent: &Header, last_hashes: LastHashes) -> Result<ClosedBlock, Error> {
let block = BlockView::new(block_bytes); let block = BlockView::new(block_bytes);
let header = block.header(); let header = block.header();
enact(&header, &block.transactions(), &block.uncles(), engine, db, parent, last_hashes) enact(&header, &block.transactions(), &block.uncles(), engine, db, parent, last_hashes)
} }
/// Enact the block given by `block_bytes` using `engine` on the database `db` with given `parent` block header /// Enact the block given by `block_bytes` using `engine` on the database `db` with given `parent` block header
pub fn enact_verified(block: &PreverifiedBlock, engine: &Engine, db: Box<JournalDB + Send>, parent: &Header, last_hashes: LastHashes) -> Result<ClosedBlock, Error> { pub fn enact_verified(block: &PreverifiedBlock, engine: &Engine, db: Box<Box<JournalDB>>, parent: &Header, last_hashes: LastHashes) -> Result<ClosedBlock, Error> {
let view = BlockView::new(&block.bytes); let view = BlockView::new(&block.bytes);
enact(&block.header, &block.transactions, &view.uncles(), engine, db, parent, last_hashes) enact(&block.header, &block.transactions, &view.uncles(), engine, db, parent, last_hashes)
} }
/// Enact the block given by `block_bytes` using `engine` on the database `db` with given `parent` block header. Seal the block aferwards /// Enact the block given by `block_bytes` using `engine` on the database `db` with given `parent` block header. Seal the block aferwards
pub fn enact_and_seal(block_bytes: &[u8], engine: &Engine, db: Box<JournalDB + Send>, parent: &Header, last_hashes: LastHashes) -> Result<SealedBlock, Error> { pub fn enact_and_seal(block_bytes: &[u8], engine: &Engine, db: Box<Box<JournalDB>>, parent: &Header, last_hashes: LastHashes) -> Result<SealedBlock, Error> {
let header = BlockView::new(block_bytes).header_view(); let header = BlockView::new(block_bytes).header_view();
Ok(try!(try!(enact_bytes(block_bytes, engine, db, parent, last_hashes)).seal(engine, header.seal()))) Ok(try!(try!(enact_bytes(block_bytes, engine, db, parent, last_hashes)).seal(engine, header.seal())))
} }

View File

@ -101,7 +101,7 @@ impl ClientReport {
pub struct Client<V = CanonVerifier> where V: Verifier { pub struct Client<V = CanonVerifier> where V: Verifier {
chain: Arc<BlockChain>, chain: Arc<BlockChain>,
engine: Arc<Box<Engine>>, engine: Arc<Box<Engine>>,
state_db: Mutex<Box<JournalDB + Send>>, state_db: Mutex<Box<Box<JournalDB>>>,
block_queue: BlockQueue, block_queue: BlockQueue,
report: RwLock<ClientReport>, report: RwLock<ClientReport>,
import_lock: Mutex<()>, import_lock: Mutex<()>,

View File

@ -31,7 +31,7 @@ pub type ApplyResult = Result<Receipt, Error>;
/// Representation of the entire state of all accounts in the system. /// Representation of the entire state of all accounts in the system.
pub struct State { pub struct State {
db: Box<JournalDB + Send>, db: Box<Box<JournalDB>>,
root: H256, root: H256,
cache: RefCell<HashMap<Address, Option<Account>>>, cache: RefCell<HashMap<Address, Option<Account>>>,
snapshots: RefCell<Vec<HashMap<Address, Option<Option<Account>>>>>, snapshots: RefCell<Vec<HashMap<Address, Option<Option<Account>>>>>,
@ -41,7 +41,7 @@ pub struct State {
impl State { impl State {
/// Creates new state with empty state root /// Creates new state with empty state root
#[cfg(test)] #[cfg(test)]
pub fn new(mut db: Box<JournalDB + Send>, account_start_nonce: U256) -> State { pub fn new(mut db: Box<Box<JournalDB>>, account_start_nonce: U256) -> State {
let mut root = H256::new(); let mut root = H256::new();
{ {
// init trie and reset root too null // init trie and reset root too null
@ -58,7 +58,7 @@ impl State {
} }
/// Creates new state with existing state root /// Creates new state with existing state root
pub fn from_existing(db: Box<JournalDB + Send>, root: H256, account_start_nonce: U256) -> State { pub fn from_existing(db: Box<Box<JournalDB>>, root: H256, account_start_nonce: U256) -> State {
{ {
// trie should panic! if root does not exist // trie should panic! if root does not exist
let _ = SecTrieDB::new(db.as_hashdb(), &root); let _ = SecTrieDB::new(db.as_hashdb(), &root);
@ -126,7 +126,7 @@ impl State {
} }
/// Destroy the current object and return root and database. /// Destroy the current object and return root and database.
pub fn drop(self) -> (H256, Box<JournalDB + Send>) { pub fn drop(self) -> (H256, Box<Box<JournalDB>>) {
(self.root, self.db) (self.root, self.db)
} }

View File

@ -250,7 +250,7 @@ pub fn generate_dummy_empty_blockchain() -> GuardedTempResult<BlockChain> {
} }
} }
pub fn get_temp_journal_db() -> GuardedTempResult<Box<JournalDB + Send>> { pub fn get_temp_journal_db() -> GuardedTempResult<Box<Box<JournalDB>>> {
let temp = RandomTempPath::new(); let temp = RandomTempPath::new();
let journal_db = Box::new(OptionOneDB::new(temp.as_str())); let journal_db = Box::new(OptionOneDB::new(temp.as_str()));
GuardedTempResult { GuardedTempResult {
@ -268,7 +268,7 @@ pub fn get_temp_state() -> GuardedTempResult<State> {
} }
} }
pub fn get_temp_journal_db_in(path: &Path) -> Box<JournalDB + Send> { pub fn get_temp_journal_db_in(path: &Path) -> Box<Box<JournalDB>> {
Box::new(OptionOneDB::new(path.to_str().unwrap())) Box::new(OptionOneDB::new(path.to_str().unwrap()))
} }

View File

@ -26,9 +26,9 @@ use std::env;
/// A HashDB which can manage a short-term journal potentially containing many forks of mutually /// A HashDB which can manage a short-term journal potentially containing many forks of mutually
/// exclusive actions. /// exclusive actions.
pub trait JournalDB : HashDB { pub trait JournalDB : HashDB + Sync + Send {
/// Return a copy of ourself, in a box. /// Return a copy of ourself, in a box.
fn spawn(&self) -> Box<JournalDB + Send>; fn spawn(&self) -> Box<Box<JournalDB>>;
/// Returns heap memory size used /// Returns heap memory size used
fn mem_used(&self) -> usize; fn mem_used(&self) -> usize;
@ -418,7 +418,7 @@ impl HashDB for OptionOneDB {
} }
impl JournalDB for OptionOneDB { impl JournalDB for OptionOneDB {
fn spawn(&self) -> Box<JournalDB + Send> { fn spawn(&self) -> Box<Box<JournalDB>> {
Box::new(OptionOneDB { Box::new(OptionOneDB {
overlay: MemoryDB::new(), overlay: MemoryDB::new(),
backing: self.backing.clone(), backing: self.backing.clone(),