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