@@ -298,11 +298,14 @@ impl<'a, B: BlockchainBackend + 'static> HorizonStateSynchronization<'a, B> {
298298 debug ! ( target: LOG_TARGET , "Synchronizing kernels" ) ;
299299 self . synchronize_kernels ( sync_peer. clone ( ) , client, to_header) . await ?;
300300 debug ! ( target: LOG_TARGET , "Synchronizing outputs" ) ;
301+ let cloned_backup_smt = self . db . inner ( ) . smt_read_access ( ) ?. clone ( ) ;
301302 match self . synchronize_outputs ( sync_peer, client, to_header) . await {
302303 Ok ( _) => Ok ( ( ) ) ,
303304 Err ( err) => {
304305 // We need to clean up the outputs
305306 let _ = self . clean_up_failed_output_sync ( to_header) . await ;
307+ let mut smt = self . db . inner ( ) . smt_write_access ( ) ?;
308+ * smt = cloned_backup_smt;
306309 Err ( err)
307310 } ,
308311 }
@@ -618,7 +621,7 @@ impl<'a, B: BlockchainBackend + 'static> HorizonStateSynchronization<'a, B> {
618621 let mut utxo_counter = 0u64 ;
619622 let mut stxo_counter = 0u64 ;
620623 let timer = Instant :: now ( ) ;
621- let mut output_smt = db. fetch_tip_smt ( ) . await ? ;
624+ let mut output_smt = ( * db. inner ( ) . smt_write_access ( ) ? ) . clone ( ) ;
622625 let mut last_sync_timer = Instant :: now ( ) ;
623626 let mut avg_latency = RollingAverageTime :: new ( 20 ) ;
624627
@@ -766,8 +769,8 @@ impl<'a, B: BlockchainBackend + 'static> HorizonStateSynchronization<'a, B> {
766769 txn. commit ( ) . await ?;
767770 }
768771 }
769- // This has a very low probability of failure
770- db . set_tip_smt ( output_smt) . await ? ;
772+ let mut writing_lock_output_smt = db . inner ( ) . smt_write_access ( ) ? ;
773+ * writing_lock_output_smt = output_smt;
771774 debug ! (
772775 target: LOG_TARGET ,
773776 "Finished syncing TXOs: {} unspent and {} spent downloaded in {:.2?}" ,
0 commit comments