From 04bd0428e3e1f0dcdc290c7d0ea16c7408e3f20e Mon Sep 17 00:00:00 2001
From: Constantin P <papizh.konstantin@demlabs.net>
Date: Fri, 1 Sep 2023 19:30:33 +0700
Subject: [PATCH] Revert "hotfix-9408"

This reverts commit 1d36f734212a322b047fac0c5672ac0e7e043865.
---
 modules/type/blocks/dap_chain_cs_blocks.c | 20 +++++++-------------
 modules/type/dag/dap_chain_cs_dag.c       | 13 +++++--------
 2 files changed, 12 insertions(+), 21 deletions(-)

diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 4963bc7d5b..e5227ffdbc 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -962,7 +962,9 @@ static int s_add_atom_datums(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_ca
  */
 static int s_add_atom_to_blocks(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_cache_t *a_block_cache )
 {
-    int l_res = s_add_atom_datums(a_blocks, a_block_cache);
+    int l_res = 0;
+    pthread_rwlock_wrlock( &PVT(a_blocks)->rwlock );
+    l_res = s_add_atom_datums(a_blocks, a_block_cache);
     debug_if(s_debug_more, L_DEBUG, "Block %s checked, %s", a_block_cache->block_hash_str,
                                                             l_res == (int)a_block_cache->datum_count ?
                                                             "all correct" : "but ledger declined");
@@ -1062,21 +1064,15 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
     pthread_rwlock_wrlock(&PVT(l_blocks)->datums_lock);
     dap_chain_hash_fast_t l_block_hash;
     dap_hash_fast(l_block, l_block_size, &l_block_hash);
-
-    dap_chain_block_cache_t * l_block_cache = NULL;
-    pthread_rwlock_wrlock(& PVT(l_blocks)->rwlock);
-    HASH_FIND(hh, PVT(l_blocks)->blocks,&l_block_hash, sizeof (l_block_hash), l_block_cache );
-
+    dap_chain_block_cache_t * l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_block_hash);
     if (l_block_cache ){
         debug_if(s_debug_more, L_DEBUG, "... already present in blocks %s", l_block_cache->block_hash_str);
         pthread_rwlock_unlock(&PVT(l_blocks)->datums_lock);
-        pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
         return ATOM_PASS;
     } else {
         l_block_cache = dap_chain_block_cache_new(l_blocks, &l_block_hash, l_block, l_block_size);
         if (!l_block_cache) {
             log_it(L_DEBUG, "... corrupted block");
-            pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
             pthread_rwlock_unlock(&PVT(l_blocks)->datums_lock);
             return ATOM_REJECT;
         }
@@ -1097,7 +1093,9 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
         if(l_consensus_check == 1){
              debug_if(s_debug_more, L_DEBUG, "... added");
         }else if (l_consensus_check == DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS){
+            pthread_rwlock_wrlock( &PVT(l_blocks)->rwlock );
             HASH_ADD(hh, PVT(l_blocks)->blocks_tx_treshold, block_hash, sizeof(l_block_cache->block_hash), l_block_cache);
+            pthread_rwlock_unlock( &PVT(l_blocks)->rwlock );
             debug_if(s_debug_more, L_DEBUG, "... tresholded for tx ledger");
         }else{
              debug_if(s_debug_more, L_WARNING, "... error adding (code %d)", l_consensus_check);
@@ -1105,12 +1103,9 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
         }
          // !TODO make chunks add to blocks
     }else if(ret == ATOM_MOVE_TO_THRESHOLD){
-        l_block_cache = NULL;
-        HASH_FIND(hh, PVT(l_blocks)->blocks,&l_block_hash, sizeof (l_block_hash), l_block_cache );
-        if (l_block_cache) {
+        if (dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_block_hash)) {
             // if it was concurrent atom processed before
             dap_chain_block_cache_delete(l_block_cache);
-            pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
             return ATOM_PASS;
         }
         dap_chain_block_chunks_add( PVT(l_blocks)->chunks,l_block_cache);
@@ -1121,7 +1116,6 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da
     debug_if(s_debug_more, L_DEBUG, "Verified atom %p: %s", a_atom, ret == ATOM_ACCEPT ? "accepted" :
                                                    (ret == ATOM_REJECT ? "rejected" : "thresholded"));
     //s_bft_consensus_setup(l_blocks);
-    pthread_rwlock_unlock(&PVT(l_blocks)->rwlock);
     return ret;
 }
 
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 1665ee8b71..222e929555 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -524,7 +524,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
     // check if we already have this event
     dap_chain_atom_verify_res_t ret = s_dap_chain_check_if_event_is_present(PVT(l_dag)->events, &l_event_item->hash) ||
             s_dap_chain_check_if_event_is_present(PVT(l_dag)->events_treshold, &l_event_item->hash) ? ATOM_PASS : ATOM_ACCEPT;
-    //pthread_mutex_unlock(l_events_mutex);
+    pthread_mutex_unlock(l_events_mutex);
 
     // verify hashes and consensus
     switch (ret) {
@@ -541,7 +541,6 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
             log_it(L_DEBUG, "Atom already present");
         }
         DAP_DELETE(l_event_item);
-        pthread_mutex_unlock(l_events_mutex);
         return ret;
     default:
         break;
@@ -549,8 +548,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
 
     switch (ret) {
     case ATOM_MOVE_TO_THRESHOLD:
-        //pthread_mutex_lock(l_events_mutex);
-        ;
+        pthread_mutex_lock(l_events_mutex);
         dap_chain_cs_dag_blocked_t *el = NULL;
         HASH_FIND(hh, PVT(l_dag)->removed_events_from_treshold, &l_event_item->hash, sizeof(dap_chain_hash_fast_t), el);
         if (!el) {
@@ -563,7 +561,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
             if (s_debug_more)
                 log_it(L_DEBUG, "... rejected because the atom was removed from the threshold.");
         }
-        //pthread_mutex_unlock(l_events_mutex);
+        pthread_mutex_unlock(l_events_mutex);
         break;
     case ATOM_ACCEPT: {
         int l_consensus_check = s_dap_chain_add_atom_to_events_table(l_dag, l_event_item);
@@ -590,7 +588,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
                 log_it(L_WARNING, "... added with ledger code %d", l_consensus_check);
             break;
         }
-        //pthread_mutex_lock(l_events_mutex);
+        pthread_mutex_lock(l_events_mutex);
         dap_chain_cs_dag_event_item_t *l_tail = PVT(l_dag)->events ? PVT(l_dag)->events->hh.tbl->tail->prev : NULL;
         if (!l_tail)
             l_tail = PVT(l_dag)->events;
@@ -603,13 +601,12 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
         else
             HASH_ADD(hh, PVT(l_dag)->events, hash, sizeof(l_event_item->hash), l_event_item);
         s_dag_events_lasts_process_new_last_event(l_dag, l_event_item);
-        //pthread_mutex_unlock(l_events_mutex);
+        pthread_mutex_unlock(l_events_mutex);
     } break;
     default:
         DAP_DELETE(l_event_item); // Neither added, nor freed
         break;
     }
-    pthread_mutex_unlock(l_events_mutex);
     return ret;
 }
 
-- 
GitLab