From faada58306db80ec4250486a39196d7f05888132 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Mon, 30 Sep 2019 11:07:17 +0200 Subject: [PATCH] [fix] blockchain: avoid nested transactions --- .../bc-db-writer/src/blocks/fork_tree.rs | 16 +++++++--------- .../blockchain/blockchain/src/fork/rollback.rs | 1 + 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/modules/blockchain/bc-db-writer/src/blocks/fork_tree.rs b/lib/modules/blockchain/bc-db-writer/src/blocks/fork_tree.rs index 30f41d92..bb058054 100644 --- a/lib/modules/blockchain/bc-db-writer/src/blocks/fork_tree.rs +++ b/lib/modules/blockchain/bc-db-writer/src/blocks/fork_tree.rs @@ -74,6 +74,7 @@ pub fn insert_new_fork_block( /// Modify the main branch (function to call after a successful roolback) pub fn change_main_branch( db: &Db, + w: &mut DbWriter, fork_tree: &mut ForkTree, old_current_blockstamp: Blockstamp, new_current_blockstamp: Blockstamp, @@ -83,15 +84,12 @@ pub fn change_main_branch( let removed_blockstamps = fork_tree.get_removed_blockstamps(); // Remove too old blocks - db.write(|mut w| { - let fork_blocks_store = db.get_store(FORK_BLOCKS); - for blockstamp in removed_blockstamps { - let blockstamp_bytes: Vec<u8> = blockstamp.into(); - fork_blocks_store.delete(w.as_mut(), &blockstamp_bytes)?; - } - - Ok(w) - }) + let fork_blocks_store = db.get_store(FORK_BLOCKS); + for blockstamp in removed_blockstamps { + let blockstamp_bytes: Vec<u8> = blockstamp.into(); + fork_blocks_store.delete(w.as_mut(), &blockstamp_bytes)?; + } + Ok(()) } #[cfg(test)] diff --git a/lib/modules/blockchain/blockchain/src/fork/rollback.rs b/lib/modules/blockchain/blockchain/src/fork/rollback.rs index 6ff7069f..8aacf3b8 100644 --- a/lib/modules/blockchain/blockchain/src/fork/rollback.rs +++ b/lib/modules/blockchain/blockchain/src/fork/rollback.rs @@ -146,6 +146,7 @@ pub fn apply_rollback(bc: &mut BlockchainModule, new_bc_branch: Vec<Blockstamp>) // update main branch in fork tree if let Err(err) = durs_bc_db_writer::blocks::fork_tree::change_main_branch( &db, + &mut w, &mut bc.fork_tree, old_current_blockstamp, bc.current_blockstamp, -- GitLab