diff --git a/dap_chain_node_client.c b/dap_chain_node_client.c index 6230ebdf91f52f3af42c20c9586e6f74d8c95c00..15635f81a9e11a5a8022eb0f87a8996295e2d29d 100644 --- a/dap_chain_node_client.c +++ b/dap_chain_node_client.c @@ -107,8 +107,8 @@ static void stage_status_callback(dap_client_t *a_client, void *a_arg) static void s_stage_status_error_callback(dap_client_t *a_client, void *a_arg) { (void) a_arg; - dap_chain_node_client_t *l_node_client = a_client->_inheritor; - if ( DAP_CHAIN_NODE_CLIENT(a_client)->keep_connection && + dap_chain_node_client_t *l_node_client = DAP_CHAIN_NODE_CLIENT(a_client); + if ( l_node_client && l_node_client->keep_connection && ( ( dap_client_get_stage(a_client) != STAGE_STREAM_STREAMING )|| ( dap_client_get_stage_status(a_client) == STAGE_STATUS_ERROR ) ) ){ log_it(L_NOTICE,"Some errors happends, current state is %s but we need to return back to STAGE_STREAM_STREAMING", @@ -321,6 +321,11 @@ void dap_chain_node_client_close(dap_chain_node_client_t *a_client) if(a_client) { // clean client //dap_client_delete(a_client->client); + + pthread_mutex_lock(&a_client->wait_mutex); + a_client->client->_inheritor = NULL;// because client->_inheritor == a_client + pthread_mutex_unlock(&a_client->wait_mutex); + pthread_cond_destroy(&a_client->wait_cond); pthread_mutex_destroy(&a_client->wait_mutex); DAP_DELETE(a_client);