From a6aed0c8d38a8bd8a12b560162d214e4a16d92b2 Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Thu, 7 May 2020 08:46:21 +0000 Subject: [PATCH] bugs-3757 --- dap-sdk/core/libdap.pri | 1 + dap-sdk/core/src/core.pri | 1 + modules/net/dap_chain_net.c | 14 ++++++++++---- modules/net/dap_chain_node_cli.c | 4 ++-- modules/net/include/dap_chain_net.h | 3 ++- modules/type/dag/dap_chain_cs_dag.c | 6 ++---- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/dap-sdk/core/libdap.pri b/dap-sdk/core/libdap.pri index b290a6c1ec..3556d8828e 100755 --- a/dap-sdk/core/libdap.pri +++ b/dap-sdk/core/libdap.pri @@ -2,6 +2,7 @@ QMAKE_CFLAGS_DEBUG = -std=gnu11 QMAKE_CFLAGS_RELEASE = -std=gnu11 unix { include(src/unix/unix.pri) + LIBS += -lrt } darwin { include(src/darwin/darwin.pri) diff --git a/dap-sdk/core/src/core.pri b/dap-sdk/core/src/core.pri index 14172b607b..81ce43173e 100755 --- a/dap-sdk/core/src/core.pri +++ b/dap-sdk/core/src/core.pri @@ -1,5 +1,6 @@ unix { include(unix/unix.pri) + LIBS += -lrt } darwin { include(darwin/darwin.pri) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 82c303ddcd..c84b3c4f9b 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -189,7 +189,7 @@ void s_net_set_go_sync(dap_chain_net_t * a_net) { if(!a_net) return; - dap_chain_net_start(a_net); + dap_chain_net_state_go_to(a_net, NET_STATE_SYNC_REQUESTED); } /** @@ -209,10 +209,16 @@ inline static const char * s_net_state_to_str(dap_chain_net_state_t l_state) */ int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_new_state) { - if (PVT(a_net)->state_target == a_new_state){ - log_it(L_WARNING,"Already going to state %s",s_net_state_to_str(a_new_state)); + if (a_new_state == NET_STATE_SYNC_REQUESTED) { + if (PVT(a_net)->state_target != NET_STATE_OFFLINE) { + PVT(a_net)->state_target = NET_STATE_ONLINE; + } + } else { + if (PVT(a_net)->state_target == a_new_state){ + log_it(L_WARNING,"Already going to state %s",s_net_state_to_str(a_new_state)); + } + PVT(a_net)->state_target = a_new_state; } - PVT(a_net)->state_target = a_new_state; pthread_mutex_lock( &PVT(a_net)->state_mutex_cond); // set flag for sync PVT(a_net)->flags |= F_DAP_CHAIN_NET_GO_SYNC; diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index abd8b8ccc3..1a993b797d 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -1013,8 +1013,8 @@ int dap_chain_node_cli_init(dap_config_t * g_config) #ifndef _WIN32 // News - dap_chain_node_cli_cmd_item_create("news", com_news, NULL, "Add News for VPN clients. Language code is a text code like \"en\", \"ru\", \"fr\"", - "news [-text <news text> | -file <filename with news>] -lang <language code> \n"); + //dap_chain_node_cli_cmd_item_create("news", com_news, NULL, "Add News for VPN clients. Language code is a text code like \"en\", \"ru\", \"fr\"", + // "news [-text <news text> | -file <filename with news>] -lang <language code> \n"); #endif // create thread for waiting of clients diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 174cfb3387..b11b20a150 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -61,7 +61,8 @@ typedef enum dap_chain_net_state{ NET_STATE_ADDR_REQUEST, // Waiting for address assign NET_STATE_SYNC_GDB, NET_STATE_SYNC_CHAINS, - NET_STATE_ONLINE + NET_STATE_ONLINE, + NET_STATE_SYNC_REQUESTED } dap_chain_net_state_t; typedef struct dap_chain_net{ diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index eb12e8dda3..1e6acf8751 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -338,7 +338,9 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t l_tx_event->ts_added = l_event_item->ts_added; l_tx_event->event = l_event; memcpy(&l_tx_event->hash, &l_event_item->hash, sizeof (l_tx_event->hash) ); + pthread_rwlock_wrlock(&PVT(l_dag)->events_rwlock); HASH_ADD(hh,PVT(l_dag)->tx_events,hash,sizeof (l_tx_event->hash),l_tx_event); + pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock); //if ( !l_gdb_priv->is_load_mode ) // If its not load module but mempool proc // l_tx->header.ts_created = time(NULL); @@ -346,7 +348,6 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t // don't save bad transactions to base if(dap_chain_ledger_tx_add(a_chain->ledger, l_tx) != 1) { - pthread_rwlock_unlock(l_events_rwlock); return -1; } //}else @@ -354,11 +355,8 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t } break; default: - pthread_rwlock_unlock(l_events_rwlock); return -1; } - - pthread_rwlock_unlock( l_events_rwlock ); // Now check the treshold if some events now are ready to move to the main table dap_chain_cs_dag_proc_treshold(l_dag); return 0; -- GitLab