diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index f05f6440e3747da5b293a48aab5ebe7111f132e3..33f62641861bbdaf6d191dd37e596796070e396b 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -1305,6 +1305,8 @@ static void s_stream_es_callback_write(dap_events_socket_t * a_es, void * arg) // Response received after client_pvt was deleted return; } + if (l_client_pvt->stage_status == STAGE_STATUS_ERROR) + return; switch (l_client_pvt->stage) { case STAGE_STREAM_STREAMING: { size_t i; diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 4ccbaf1432d7dc8fd91adc971dde8c75d8e8b573..f4fb4e7dae6bf95efc1df0825fbc7b36c5094301 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -147,6 +147,7 @@ static void s_stage_status_error_callback(dap_client_t *a_client, void *a_arg) SetEvent( l_node_client->wait_cond ); #endif pthread_mutex_unlock(&l_node_client->wait_mutex); + l_node_client->own_esh.esocket = 0; dap_timerfd_start_on_worker(dap_events_worker_get_auto(),s_timer_update_states*1000,s_timer_update_states_callback, l_node_client); return; } @@ -189,8 +190,8 @@ static bool s_timer_update_states_callback(void * a_arg ) dap_worker_t * l_worker = dap_events_get_current_worker(dap_events_get_default()); assert(l_worker); assert(l_me); - dap_events_socket_t * l_es = l_me->own_esh->esocket; - uint128_t l_es_uuid = l_me->own_esh->uuid; + dap_events_socket_t * l_es = l_me->own_esh.esocket; + uint128_t l_es_uuid = l_me->own_esh.uuid; // check if esocket still in worker if(dap_events_socket_check_unsafe(l_worker,l_es)){ // Check if its exactly ours! @@ -230,7 +231,6 @@ static bool s_timer_update_states_callback(void * a_arg ) log_it(L_INFO, "Reconnecting node client with peer "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_me->remote_node_addr)); dap_chain_node_client_connect_internal(l_me, "CN"); // isn't always CN here? } - DAP_DELETE(l_me->own_esh); return false; } @@ -265,10 +265,8 @@ static void s_stage_connected_callback(dap_client_t *a_client, void *a_arg) dap_stream_t * l_stream = dap_client_get_stream(a_client); if (l_stream) { - dap_events_socket_handler_t * l_es_handler = DAP_NEW_Z(dap_events_socket_handler_t); - l_es_handler->esocket = l_stream->esocket; - l_es_handler->uuid = l_stream->esocket->uuid; - l_node_client->own_esh = l_es_handler; + l_node_client->own_esh.esocket = l_stream->esocket; + l_node_client->own_esh.uuid = l_stream->esocket->uuid; dap_timerfd_start_on_worker(l_stream->esocket->worker,s_timer_update_states*1000,s_timer_update_states_callback, l_node_client); } #ifndef _WIN32 diff --git a/modules/net/include/dap_chain_node_client.h b/modules/net/include/dap_chain_node_client.h index 4cd81b23dd552728e69aeff7a41bd4e79fc3a2e0..1ea41b65178a16a28a857b67695248b9d519f567 100644 --- a/modules/net/include/dap_chain_node_client.h +++ b/modules/net/include/dap_chain_node_client.h @@ -94,7 +94,7 @@ typedef struct dap_chain_node_client { // Timer dap_events_socket_t * timer_update_states; - dap_events_socket_handler_t *own_esh; + dap_events_socket_handler_t own_esh; #ifndef _WIN32