diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c index 73c9257cb899dd7d91d63e676fbbdcf988ad40f8..d33a1a96b022361521045842c2cecf0014d7db30 100644 --- a/dap-sdk/net/client/dap_client.c +++ b/dap-sdk/net/client/dap_client.c @@ -207,8 +207,7 @@ void dap_client_delete(dap_client_t * a_client) pthread_mutex_unlock(&a_client->mutex); // a_client will be deleted in dap_events_socket_delete() -> free( a_es->_inheritor ); //DAP_DELETE(a_client); - DAP_DELETE(a_client); - a_client = NULL; + DAP_DEL_Z(a_client); } /** diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index f86c269f808a9bba0fec98d36f826061367a97c3..04e2fb58d3bf35dd8de1af9cd1bdaff81603749d 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -581,7 +581,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) } else if (a_client_pvt->last_error != ERROR_NETWORK_CONNECTION_TIMEOUT) { if(!l_is_last_attempt) { // small delay before next request - log_it(L_INFO, "Connection attempt â„– %d", a_client_pvt->connect_attempt); + log_it(L_INFO, "Connection attempt %d", a_client_pvt->connect_attempt); #ifdef _WIN32 Sleep(300);// 0.3 sec #else @@ -595,7 +595,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) } else{ log_it(L_INFO, "Too many connection attempts. Tries are over."); - //a_client_pvt->stage_status = STAGE_STATUS_DONE; + a_client_pvt->stage_status = STAGE_STATUS_DONE; // unref pvt //l_is_unref = true; } diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index e94553fddaa95e30bd36e6ed24c9e91666e51956..f56276cff12cdf9efd44433b69f2d02baa896268 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -273,7 +273,10 @@ static int s_net_states_proc(dap_chain_net_t * l_net) switch ( PVT(l_net)->state ){ case NET_STATE_OFFLINE:{ - PVT(l_net)->state_target = PVT(l_net)->state_new; + if (PVT(l_net)->state_new != NET_STATE_UNDEFINED) { + PVT(l_net)->state_target = PVT(l_net)->state_new; + PVT(l_net)->state_new = NET_STATE_UNDEFINED; + } // reset current link PVT(l_net)->links_count = 0; // delete all links @@ -717,7 +720,10 @@ static int s_net_states_proc(dap_chain_net_t * l_net) break; case NET_STATE_ONLINE: { - PVT(l_net)->state_target = PVT(l_net)->state_new; + if (PVT(l_net)->state_new != NET_STATE_UNDEFINED) { + PVT(l_net)->state_target = PVT(l_net)->state_new; + PVT(l_net)->state_new = NET_STATE_UNDEFINED; + } switch ( PVT(l_net)->state_target) { // disconnect case NET_STATE_OFFLINE: diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 5780765f0b2319d572267354b149bc84524e7743..2b19601490269bec6ebfa8ff457d7d4858909e49 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -335,6 +335,7 @@ static void s_ch_chain_callback_notify_packet_in(dap_stream_ch_chain_t* a_ch_cha l_lasts = l_chain->callback_atom_iter_get_lasts(l_iter, &l_lasts_size); if ( l_lasts){ for(size_t i = 0; i < l_lasts_size; i++) { + pthread_mutex_lock(&l_node_client->wait_mutex); dap_chain_atom_item_t * l_item = NULL; dap_chain_hash_fast_t l_atom_hash; dap_hash_fast(l_lasts[i], l_chain->callback_atom_get_size(l_lasts[i]), &l_atom_hash); @@ -347,6 +348,7 @@ static void s_ch_chain_callback_notify_packet_in(dap_stream_ch_chain_t* a_ch_cha } //else // DAP_DELETE(l_lasts[i]); + pthread_mutex_unlock(&l_node_client->wait_mutex); } DAP_DELETE(l_lasts); } @@ -521,7 +523,7 @@ void dap_chain_node_client_close(dap_chain_node_client_t *a_client) CloseHandle( a_client->wait_cond ); #endif pthread_mutex_destroy(&a_client->wait_mutex); - DAP_DELETE(a_client); + DAP_DEL_Z(a_client); } } diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 9e42ea0ae42655dc672ac87c899f2efa5a383d62..2247a0107eb05f171337cf0984b4b4e076696294 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -60,7 +60,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_UNDEFINED } dap_chain_net_state_t; typedef struct dap_chain_net{