From a8493a19a6bdf5ab3bda1488a2f20a6607e8ff8c Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <naeper@demlabs.net>
Date: Tue, 27 Jul 2021 14:39:15 +0700
Subject: [PATCH] [*] Fixed notify code [*] Fixed some more memleaks

---
 CMakeLists.txt                       |  2 +-
 modules/net/dap_chain_node_cli_cmd.c |  4 ++--
 modules/net/dap_chain_node_client.c  | 24 +++++++++++++-----------
 modules/net/dap_chain_node_ping.c    |  2 ++
 4 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a719384a3f..3f97d7cd72 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 3.0)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.9-14")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.9-15")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 set(DAPSDK_MODULES "")
 message("Cellframe modules: ${CELLFRAME_MODULES}")
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 54a107fe19..c9e24f8a80 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2039,8 +2039,8 @@ int com_token_decl_sign(int argc, char ** argv, void *arg_func, char ** a_str_re
             }
         } else {
             dap_chain_node_cli_set_reply_text(a_str_reply,
-                    "token_decl_sign can't find datum with %s hash in the mempool of %s:%s",l_datum_hash_out_str, l_net->pub.name,
-                    l_chain->name);
+                    "token_decl_sign can't find datum with %s hash in the mempool of %s:%s",l_datum_hash_out_str,l_net? l_net->pub.name: "<undefined>",
+                    l_chain?l_chain->name:"<undefined>");
             return -5;
         }
         DAP_DELETE(l_datum_hash_hex_str);
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 093c84bc34..d1846fd8e6 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -472,17 +472,19 @@ static void s_ch_chain_callback_notify_packet_out(dap_stream_ch_chain_t* a_ch_ch
     (void) a_pkt_data_size;
     (void) a_ch_chain;
     dap_chain_node_client_t * l_node_client = (dap_chain_node_client_t *) a_arg;
-
-    switch (a_pkt_type) {
-        case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_GLOBAL_DB: {
-            if(s_stream_ch_chain_debug_more)
-                log_it(L_INFO,"Out: global database sent to uplink "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_node_client->remote_node_addr));
-        } break;
-        case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_CHAINS: {
-            if(s_stream_ch_chain_debug_more)
-                log_it(L_INFO,"Out: chain %x sent to uplink "NODE_ADDR_FP_STR, l_node_client->cur_chain->id, NODE_ADDR_FP_ARGS_S(l_node_client->remote_node_addr));
-        }break;
-        default: {
+    assert(a_arg);
+    if(dap_stream_ch_check_uuid_unsafe(l_node_client->stream_worker, l_node_client->ch_chain, l_node_client->ch_chain_uuid)){
+        switch (a_pkt_type) {
+            case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_GLOBAL_DB: {
+                if(s_stream_ch_chain_debug_more)
+                    log_it(L_INFO,"Out: global database sent to uplink "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_node_client->remote_node_addr));
+            } break;
+            case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_CHAINS: {
+                if(s_stream_ch_chain_debug_more)
+                    log_it(L_INFO,"Out: chain %x sent to uplink "NODE_ADDR_FP_STR,l_node_client->cur_chain ? l_node_client->cur_chain->id.uint64 : 0, NODE_ADDR_FP_ARGS_S(l_node_client->remote_node_addr));
+            }break;
+            default: {
+            }
         }
     }
 }
diff --git a/modules/net/dap_chain_node_ping.c b/modules/net/dap_chain_node_ping.c
index 93ea2bb5cf..b2986f7c22 100644
--- a/modules/net/dap_chain_node_ping.c
+++ b/modules/net/dap_chain_node_ping.c
@@ -118,6 +118,7 @@ static void* node_ping_proc(void *a_arg)
         SOCKET l_socket = socket( PF_INET, SOCK_STREAM, 0);
         if(l_socket == INVALID_SOCKET) {
             log_it(L_ERROR, "Can't create socket");
+            DAP_DELETE(host4);
             return (void*) -1;
         }
         clock_gettime(CLOCK_MONOTONIC, &l_time_start);
@@ -146,6 +147,7 @@ static void* node_ping_proc(void *a_arg)
         else {
             ; //log_it(L_INFO, "Can't connect to node for ping");
         }
+        DAP_DELETE(host4);
         closesocket(l_socket);
     }
     return (void*) res;
-- 
GitLab