From b9fd39b91182d1b963864263e7c476e33b90a1ed Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Wed, 6 Apr 2022 15:15:33 +0300
Subject: [PATCH] [-] Default autoprocessing for master & root nodes

---
 modules/net/dap_chain_node.c         | 56 +++++++++++++---------------
 modules/net/dap_chain_node_cli_cmd.c |  5 ++-
 2 files changed, 29 insertions(+), 32 deletions(-)

diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index de32cd4f0e..280603a86a 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -260,53 +260,49 @@ static void s_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_co
 bool dap_chain_node_mempool_autoproc_init()
 {
     uint16_t l_net_count;
-    bool l_mempool_auto_default = false, l_ret = false;
+    if (!dap_config_get_item_bool_default(g_config, "mempool", "auto_proc", false))
+        return false;
     dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
     for (uint16_t i = 0; i < l_net_count; i++) {
         dap_chain_node_role_t l_role = dap_chain_net_get_role(l_net_list[i]);
-
         switch (l_role.enums) {
             case NODE_ROLE_ROOT:
             case NODE_ROLE_MASTER:
             case NODE_ROLE_ROOT_MASTER:
             case NODE_ROLE_CELL_MASTER:
-                l_mempool_auto_default = true;
+                l_net_list[i]->pub.mempool_autoproc = true;
                 break;
             default:
-                l_mempool_auto_default = false;
-                break;
+                l_net_list[i]->pub.mempool_autoproc = false;
+                continue;
         }
-        l_net_list[i]->pub.mempool_autoproc = dap_config_get_item_bool_default(g_config, "mempool", "auto_proc", l_mempool_auto_default);
-        if (l_net_list[i]->pub.mempool_autoproc) {
-            l_ret = true;
-            dap_chain_t *l_chain;
-            DL_FOREACH(l_net_list[i]->pub.chains, l_chain) {
-                if (!l_chain) {
-                    continue;
-                }
-                char *l_gdb_group_mempool = NULL;
-                l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool(l_chain);
-                size_t l_objs_size = 0;
-                dap_global_db_obj_t *l_objs = dap_chain_global_db_gr_load(l_gdb_group_mempool, &l_objs_size);
-                if (l_objs_size) {
-                    for (size_t i = 0; i < l_objs_size; i++) {
-                        if (!l_objs[i].value_len)
-                            continue;
-                        dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value;
-                        if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) {
-                            // Delete processed objects
-                            dap_chain_global_db_gr_del( l_objs[i].key, l_gdb_group_mempool);
-                        }
+        dap_chain_t *l_chain;
+        DL_FOREACH(l_net_list[i]->pub.chains, l_chain) {
+            if (!l_chain) {
+                continue;
+            }
+            char *l_gdb_group_mempool = NULL;
+            l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool(l_chain);
+            size_t l_objs_size = 0;
+            dap_global_db_obj_t *l_objs = dap_chain_global_db_gr_load(l_gdb_group_mempool, &l_objs_size);
+            if (l_objs_size) {
+                for (size_t i = 0; i < l_objs_size; i++) {
+                    if (!l_objs[i].value_len)
+                        continue;
+                    dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value;
+                    if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) {
+                        // Delete processed objects
+                        dap_chain_global_db_gr_del( l_objs[i].key, l_gdb_group_mempool);
                     }
-                    dap_chain_global_db_objs_delete(l_objs, l_objs_size);
                 }
-                DAP_DELETE(l_gdb_group_mempool);
-                dap_chain_add_mempool_notify_callback(l_chain, s_chain_node_mempool_autoproc_notify, l_chain);
+                dap_chain_global_db_objs_delete(l_objs, l_objs_size);
             }
+            DAP_DELETE(l_gdb_group_mempool);
+            dap_chain_add_mempool_notify_callback(l_chain, s_chain_node_mempool_autoproc_notify, l_chain);
         }
     }
     DAP_DELETE(l_net_list);
-    return l_ret;
+    return true;
 }
 
 /**
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 2dd76fb6b5..145712ef7f 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -3340,9 +3340,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     // Delete token emission
     DAP_DEL_Z(l_emission);
 
-    //remove previous emission datum from mempool if have new signed emission datum
     char *l_gdb_group_mempool_emission = dap_chain_net_get_gdb_group_mempool(l_chain_emission);
-    dap_chain_global_db_gr_del(l_emission_hash_str_remove, l_gdb_group_mempool_emission);
 
     size_t l_datum_emission_size = sizeof(l_datum_emission->header) + l_datum_emission->header.data_size;
 
@@ -3368,6 +3366,9 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
         DAP_DEL_Z(l_certs);
         return -1;
     }
+    //remove previous emission datum from mempool if have new signed emission datum
+    if (l_emission_hash_str_remove)
+        dap_chain_global_db_gr_del(l_emission_hash_str_remove, l_gdb_group_mempool_emission);
 
     if(l_chain_base_tx) {
         dap_chain_hash_fast_t *l_datum_tx_hash = dap_chain_mempool_base_tx_create(l_chain_base_tx, &l_emission_hash,
-- 
GitLab