From fa7061a1920d3d165809c4cad000acc83ab9265a Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Tue, 13 Aug 2024 19:38:32 +0300
Subject: [PATCH] [*] Windows deadlock fix

---
 modules/chain/dap_chain_cell.c      | 2 +-
 modules/type/dag/dap_chain_cs_dag.c | 9 +++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index 9ce2968863..c1e2456c4a 100644
--- a/modules/chain/dap_chain_cell.c
+++ b/modules/chain/dap_chain_cell.c
@@ -630,7 +630,7 @@ ssize_t dap_chain_cell_file_append(dap_chain_cell_t *a_cell, const void *a_atom,
             NTSTATUS err = pfnNtExtendSection(hSection, &SectionSize);
             if ( !NT_SUCCESS(err) ) {
                 log_it(L_ERROR, "NtExtendSection() failed, status %lx", err);
-                return -4;
+                l_err = true;
             }
         }
 #endif
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 200cbbbe14..a12a7f690a 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -93,7 +93,7 @@ typedef struct dap_chain_cs_dag_pvt {
 static int s_chain_cs_dag_new(dap_chain_t *a_chain, dap_config_t *a_chain_cfg);
 static void s_chain_cs_dag_delete(dap_chain_t *a_chain);
 static void s_dap_chain_cs_dag_purge(dap_chain_t *a_chain);
-static void s_dap_chain_cs_dag_threshold_free(dap_chain_cs_dag_t *a_dag);
+static void s_threshold_free(dap_chain_cs_dag_t *a_dag);
 static dap_chain_cs_dag_event_item_t *s_dag_proc_treshold(dap_chain_cs_dag_t *a_dag);
 
 // Atomic element organization callbacks
@@ -286,14 +286,15 @@ static int s_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     l_dag->gdb_group_events_round_new = dap_strdup_printf(l_dag->is_celled ? "dag-%s-%s-%016llx-round.new" : "dag-%s-%s-round.new",
                                         "Snet", a_chain->name, 0LLU);
 #endif
-    PVT(l_dag)->treshold_fee_timer = dap_interval_timer_create(900000, (dap_timer_callback_t)s_dap_chain_cs_dag_threshold_free, l_dag);
+    PVT(l_dag)->treshold_fee_timer = dap_interval_timer_create(900000, (dap_timer_callback_t)s_threshold_free, l_dag);
 
     log_it (L_NOTICE, "DAG chain initialized (%s)", l_dag->is_single_line ? "single line" : "multichain");
 
     return 0;
 }
 
-static void s_dap_chain_cs_dag_threshold_free(dap_chain_cs_dag_t *a_dag) {
+static void s_threshold_free(dap_chain_cs_dag_t *a_dag)
+{
     dap_chain_cs_dag_pvt_t *l_pvt = PVT(a_dag);
     dap_chain_cs_dag_event_item_t *l_current = NULL, *l_tmp = NULL;
     dap_nanotime_t  l_time_cut_off = dap_nanotime_now() - dap_nanotime_from_sec(7200); //7200 sec = 2 hours.
@@ -303,7 +304,7 @@ static void s_dap_chain_cs_dag_threshold_free(dap_chain_cs_dag_t *a_dag) {
         if (l_current->ts_added < l_time_cut_off) {
             dap_chain_cs_dag_blocked_t *l_el = DAP_NEW(dap_chain_cs_dag_blocked_t);
             if (!l_el) {
-        log_it(L_CRITICAL, "%s", c_error_memory_alloc);
+                log_it(L_CRITICAL, "%s", c_error_memory_alloc);
                 pthread_mutex_unlock(&l_pvt->events_mutex);
                 return;
             }
-- 
GitLab