diff --git a/CMakeLists.txt b/CMakeLists.txt index e40ff7e0690dff2b9c7b1e4ced6311cb7287913e..bc0a64ab0b05374d01d613e922e8aa5f622857a9 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 aca8f087bca238c7ce5ad50cf5ea17966d71d042..a1e40bde90d175d75ced6df8cbb4d6d56df4a348 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 7fe973442df58c40a14ceb658ad0d16dcb882bea..582ffe1b6b8fc0f3d82b5bf59a0d0e4231306240 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 f73b95c2158786bdc8499dc0824f1b63753a44b3..a6b1bb9e4ba55fde45948250e1469c80974e0f4b 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);