diff --git a/dap-sdk/core/libdap.pri b/dap-sdk/core/libdap.pri index b290a6c1ecd98561c966e9d9d83b1c8653565949..3556d8828e0c29a59f3fc03751f2140501bfd503 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 14172b607b0058e8c19c58dd47781a7ed443192c..81ce43173ef2d3b5b0e8aab7941b9283041f368e 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 82c303ddcda2ddc1187c66c57cf6bf3db5aea045..c84b3c4f9b5160bc85f238e5b2b036885a9c1239 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 a702cfa8d41015a2dc32a36454c9c9c0ee5fe303..d3ebd6e8bcc637608f580d97a5eba291102d6e42 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -1015,7 +1015,6 @@ int dap_chain_node_cli_init(dap_config_t * g_config) // 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"); - #endif // create thread for waiting of clients pthread_t l_thread_id; diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 174cfb338759548a74010e1f9f13fd8841777d29..b11b20a1503bbf9b54bb33aba8b997295786aafd 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 eb12e8dda3955cb23ca27f342088a9439df36799..1e6acf8751e67bf2731d745c008da99144a21fa4 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;