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