From 2783b20ec4e43e7fb7d5d037cb3f98a73717bb7c Mon Sep 17 00:00:00 2001
From: Constantin Papizh <p.const@bk.ru>
Date: Tue, 5 May 2020 15:28:09 +0300
Subject: [PATCH] Some runtime errors and segfaults fixed

---
 dap-sdk/net/client/dap_client.c     | 3 +--
 dap-sdk/net/client/dap_client_pvt.c | 4 ++--
 modules/net/dap_chain_node_client.c | 4 +++-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index 73c9257cb8..d33a1a96b0 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 f86c269f80..04e2fb58d3 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_node_client.c b/modules/net/dap_chain_node_client.c
index 5780765f0b..2b19601490 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);
     }
 }
 
-- 
GitLab