From 10ea3d327dd1e71a085d7f9260c699bd60e4af2c Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Tue, 13 Oct 2020 13:06:17 +0000 Subject: [PATCH] bugs-4567 --- CMakeLists.txt | 2 +- modules/chain/dap_chain_ledger.c | 9 +++++---- modules/chain/include/dap_chain_ledger.h | 2 +- modules/net/dap_chain_net.c | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e40ff7e069..bc0a64ab0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 2.8) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.5-26") +set(CELLFRAME_SDK_NATIVE_VERSION "2.5-27") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index aca8f087bc..a1e40bde90 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -344,8 +344,8 @@ static void s_treshold_txs_proc( dap_ledger_t *a_ledger) l_success = false; dap_chain_ledger_tx_item_t *l_tx_item, *l_tx_tmp; HASH_ITER(hh, PVT(a_ledger)->treshold_txs, l_tx_item, l_tx_tmp) { - int l_res = dap_chain_ledger_tx_add(a_ledger, l_tx_item->tx); - if (!l_res) { + int l_res = dap_chain_ledger_tx_add(a_ledger, l_tx_item->tx, true); + if (l_res == 1) { pthread_rwlock_wrlock(&PVT(a_ledger)->treshold_txs_rwlock); HASH_DEL(PVT(a_ledger)->treshold_txs, l_tx_item); pthread_rwlock_unlock(&PVT(a_ledger)->treshold_txs_rwlock); @@ -1090,7 +1090,7 @@ int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t * * * return 1 OK, -1 error */ -int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx) +int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, bool a_from_threshold) { if(!a_tx){ log_it(L_ERROR, "NULL tx detected"); @@ -1355,7 +1355,8 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx) HASH_ADD(hh, l_ledger_priv->ledger_items, tx_hash_fast, sizeof(dap_chain_hash_fast_t), l_item_tmp); // tx_hash_fast: name of key field pthread_rwlock_unlock(&l_ledger_priv->ledger_rwlock); - s_treshold_txs_proc(a_ledger); + if (!a_from_threshold) + s_treshold_txs_proc(a_ledger); ret = 1; } FIN: diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index 7fe973442d..582ffe1b6b 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -82,7 +82,7 @@ static inline dap_chain_hash_fast_t* dap_chain_node_datum_tx_calc_hash(dap_chain * * return 1 OK, -1 error */ -int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx); +int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, bool a_from_threshold); int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index f73b95c215..a6b1bb9e4b 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -397,7 +397,7 @@ static int s_net_states_proc(dap_chain_net_t * l_net) // Add other root nodes as synchronization links for (int i = 0; i < MIN(s_max_links_count, l_pvt_net->seed_aliases_count); i++) { dap_chain_node_addr_t *l_link_addr = dap_chain_node_alias_find(l_net, l_pvt_net->seed_aliases[i]); - if (l_link_addr->uint64 == l_own_addr) { + if (!l_link_addr || l_link_addr->uint64 == l_own_addr) { continue; // Do not link with self } dap_chain_node_info_t *l_link_node_info = dap_chain_node_info_read(l_net, l_link_addr); -- GitLab