From 88f3a19f258a8531536d8b1408960139437e9c7b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=D0=B5x=D0=B0nder=20Lysik=D0=BEv?=
 <alexander.lysikov@demlabs.net>
Date: Mon, 10 Jun 2019 23:27:00 +0500
Subject: [PATCH] fixed memory corruption

---
 dap_chain_net.c         | 18 +++++++++---------
 dap_chain_node_client.c |  4 ++--
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/dap_chain_net.c b/dap_chain_net.c
index 32304a2eb8..af39eb127d 100644
--- a/dap_chain_net.c
+++ b/dap_chain_net.c
@@ -242,7 +242,7 @@ lb_proc_state:
                     if ( l_net->pub.cell_id.uint64 == 0 ){
                         PVT(l_net)->links_addrs_count=1;
                         PVT(l_net)->links_addrs = DAP_NEW_Z_SIZE(dap_chain_node_addr_t,
-                                                                 PVT(l_net)->links_addrs_count);
+                                                                 PVT(l_net)->links_addrs_count * sizeof(dap_chain_node_addr_t));
                         dap_chain_node_addr_t * l_node_addr = dap_chain_node_alias_find(l_net, PVT(l_net)->seed_aliases[0] );
                         PVT(l_net)->links_addrs[0].uint64 = l_node_addr? l_node_addr->uint64 : 0;
                     }else {
@@ -375,10 +375,10 @@ lb_proc_state:
                 PVT(l_net)->addr_request_attempts++;
                 int l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_NODE_ADDR_LEASED, timeout_ms);
                 switch (l_res) {
-                    case 0:
+                    case -1:
                         log_it(L_WARNING,"Timeout with addr leasing");
                     continue; // try with another link
-                    case 1:
+                    case 0:
                         log_it(L_INFO, "Node address leased");
                         PVT(l_net)->state = NET_STATE_SYNC_GDB;
                     pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state;
@@ -419,21 +419,21 @@ lb_proc_state:
                 }
 
                 // wait for finishing of request
-                int timeout_ms = 5000; // 2 min = 120 sec = 120 000 ms
+                int timeout_ms = 50000; // 2 min = 120 sec = 120 000 ms
                 // TODO add progress info to console
                 int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
                 switch (res) {
-                    case 0:
+                    case -1:
                         log_it(L_WARNING,"Timeout with link sync");
                     break;
-                    case 1:
+                    case 0:
                         log_it(L_INFO, "Node sync completed");
                     break;
                     default:
                         log_it(L_INFO, "Node sync error %d",res);
                 }
             }
-            if ( PVT(l_net)->state_target == NET_STATE_ONLINE ){
+            if ( PVT(l_net)->state_target >= NET_STATE_ONLINE ){
                 PVT(l_net)->state = NET_STATE_SYNC_CHAINS;
             }else {
                 PVT(l_net)->state = NET_STATE_ONLINE;
@@ -461,10 +461,10 @@ lb_proc_state:
                         // TODO add progress info to console
                         int l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
                         switch (l_res) {
-                            case 0:
+                            case -1:
                                 log_it(L_WARNING,"Timeout with link sync");
                             break;
-                            case 1:
+                            case 0:
                                 log_it(L_INFO, "Node sync completed");
                             break;
                             default:
diff --git a/dap_chain_node_client.c b/dap_chain_node_client.c
index b1ac1f26f8..6230ebdf91 100644
--- a/dap_chain_node_client.c
+++ b/dap_chain_node_client.c
@@ -355,7 +355,7 @@ int dap_chain_node_client_send_ch_pkt(dap_chain_node_client_t *a_client, uint8_t
  *
  * timeout_ms timeout in milliseconds
  * waited_state state which we will wait, sample NODE_CLIENT_STATE_CONNECT or NODE_CLIENT_STATE_SENDED
- * return -1 false, 0 timeout, 1 end of connection or sending data
+ * return -2 false, -1 timeout, 0 end of connection or sending data
  */
 int dap_chain_node_client_wait(dap_chain_node_client_t *a_client, int a_waited_state, int a_timeout_ms)
 {
@@ -366,7 +366,7 @@ int dap_chain_node_client_wait(dap_chain_node_client_t *a_client, int a_waited_s
     // have waited
     if(a_client->state == a_waited_state) {
         pthread_mutex_unlock(&a_client->wait_mutex);
-        return 1;
+        return 0;
     }
     // prepare for signal waiting
     struct timespec to;
-- 
GitLab