From 5d35d166004a0ccf82eb12fb2b8e2bdf3d1a8a14 Mon Sep 17 00:00:00 2001
From: Pavel Uhanov <pavel.uhanov@demlabs.net>
Date: Thu, 20 Jul 2023 13:24:12 +0700
Subject: [PATCH] [*] add datum_index clearing to s_callback_cs_blocks_purge

---
 modules/type/blocks/dap_chain_cs_blocks.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index bfa5077be0..34d5a7b2df 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -877,13 +877,24 @@ static void s_callback_cs_blocks_purge(dap_chain_t *a_chain)
 {
     dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
     pthread_rwlock_wrlock(&PVT(l_blocks)->rwlock);
-    dap_chain_block_cache_t *l_block, *l_block_tmp;
+    dap_chain_block_cache_t *l_block = NULL, *l_block_tmp = NULL;
     HASH_ITER(hh, PVT(l_blocks)->blocks, l_block, l_block_tmp) {
         HASH_DEL(PVT(l_blocks)->blocks, l_block);
         DAP_DELETE(l_block->block);
         dap_chain_block_cache_delete(l_block);
     }
     pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
+    
+    dap_chain_block_datum_index_t *l_datum_index = NULL, *l_datum_index_tmp = NULL;
+    pthread_rwlock_wrlock(&PVT(l_blocks)->datums_rwlock);
+    HASH_ITER(hh, PVT(l_blocks)->datum_index, l_datum_index, l_datum_index_tmp) {
+        HASH_DEL(PVT(l_blocks)->datum_index, l_datum_index);
+        DAP_DELETE(l_datum_index);
+        l_datum_index = NULL;
+    }
+    pthread_rwlock_unlock(&PVT(l_blocks)->datums_rwlock);
+    PVT(l_blocks)->blocks_count = 0;
+
     dap_chain_block_chunks_delete(PVT(l_blocks)->chunks);
     PVT(l_blocks)->block_cache_last = NULL;
     PVT(l_blocks)->block_cache_first = NULL;
-- 
GitLab