From d1c4ef4d9aa931b4286d96b982dc17419b08f43b Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Tue, 30 Jul 2024 18:18:02 +0300
Subject: [PATCH] [*] Connectivity fix

---
 io/dap_events_socket.c       |  2 +-
 io/include/dap_worker.h      |  2 ++
 net/client/dap_client_http.c | 15 ++++++++-------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/io/dap_events_socket.c b/io/dap_events_socket.c
index bd6d95171..61bedf782 100644
--- a/io/dap_events_socket.c
+++ b/io/dap_events_socket.c
@@ -1978,7 +1978,7 @@ size_t dap_events_socket_write_mt(dap_worker_t * a_w,dap_events_socket_uuid_t a_
     dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t); if (!l_msg) return 0;
     l_msg->esocket_uuid = a_es_uuid;
     if (a_data && a_data_size)
-        l_msg->data = a_data; // DAP_DUP_SIZE(a_data, a_data_size);
+        l_msg->data = (void *)a_data; // DAP_DUP_SIZE(a_data, a_data_size);
     l_msg->data_size = a_data_size;
     l_msg->flags_set = DAP_SOCK_READY_TO_WRITE;
 
diff --git a/io/include/dap_worker.h b/io/include/dap_worker.h
index ed3bb337d..36fb86543 100644
--- a/io/include/dap_worker.h
+++ b/io/include/dap_worker.h
@@ -25,6 +25,7 @@
 #include <pthread.h>
 #include "dap_common.h"
 #include "dap_events_socket.h"
+#include "dap_events.h"
 
 typedef struct dap_context dap_context_t;
 typedef struct dap_timerfd dap_timerfd_t;
@@ -88,6 +89,7 @@ void dap_worker_deinit();
 static inline dap_worker_t * dap_worker_get_current(){
     return (dap_worker_t*) pthread_getspecific(g_pth_key_worker);
 }
+#define dap_worker_get_auto dap_events_worker_get_auto
 
 int dap_worker_add_events_socket_unsafe(dap_worker_t *a_worker, dap_events_socket_t *a_esocket);
 void dap_worker_add_events_socket(dap_worker_t *a_worker, dap_events_socket_t *a_events_socket);
diff --git a/net/client/dap_client_http.c b/net/client/dap_client_http.c
index 9775f1cca..a4b4c25ef 100644
--- a/net/client/dap_client_http.c
+++ b/net/client/dap_client_http.c
@@ -505,7 +505,8 @@ static void s_client_http_delete(dap_client_http_t * a_client_http)
 {
     dap_return_if_fail(a_client_http);
     debug_if(s_debug_more, L_DEBUG, "HTTP client delete");
-
+    if (a_client_http->timer)
+        dap_timerfd_delete_unsafe(a_client_http->timer);
     DAP_DEL_Z(a_client_http->method);
     DAP_DEL_Z(a_client_http->request_content_type);
     DAP_DEL_Z(a_client_http->cookie);
@@ -730,14 +731,15 @@ dap_client_http_t * dap_client_http_request_custom (
     else if( errno == EINPROGRESS && l_err == -1){
         log_it(L_DEBUG, "Connecting to %s:%u", a_uplink_addr, a_uplink_port);
         l_client_http->worker = a_worker ? a_worker : dap_worker_get_current();
+        if (!l_client_http->worker)
+            l_client_http->worker = dap_worker_get_auto();
         l_client_http->es = l_ev_socket;
-        dap_worker_add_events_socket(l_client_http->worker, l_ev_socket);
         dap_events_socket_uuid_t * l_ev_uuid_ptr = DAP_NEW_Z(dap_events_socket_uuid_t);
         if (!l_ev_uuid_ptr) {
-        log_it(L_CRITICAL, "%s", c_error_memory_alloc);
-            DAP_DEL_MULTY(l_client_http->response, l_client_http->request, l_client_http);
-            if(a_error_callback)
+            log_it(L_CRITICAL, "%s", c_error_memory_alloc);
+            if (a_error_callback)
                 a_error_callback(errno, a_callbacks_arg);
+            DAP_DEL_MULTY(l_client_http->response, l_client_http->request, l_client_http);
             return NULL;
         }
         *l_ev_uuid_ptr = l_ev_socket->uuid;
@@ -747,6 +749,7 @@ dap_client_http_t * dap_client_http_request_custom (
                    l_client_http->worker->id, *l_ev_uuid_ptr);
             DAP_DEL_Z(l_ev_uuid_ptr);
         }
+        dap_worker_add_events_socket(l_client_http->worker, l_ev_socket);
         return l_client_http;
     }
     else{
@@ -819,8 +822,6 @@ dap_client_http_t *dap_client_http_request(dap_worker_t * a_worker,const char *a
 
 void dap_client_http_close_unsafe(dap_client_http_t *a_client_http)
 {
-    if (a_client_http->timer)
-        dap_timerfd_delete_unsafe(a_client_http->timer);
     if (a_client_http->es) {
         a_client_http->es->callbacks.delete_callback = NULL;
         dap_events_socket_remove_and_delete_unsafe(a_client_http->es, true);
-- 
GitLab