From c3352cd33eb120307c0a6f01a102076f88b7e473 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=D0=B5x=D0=B0nder=20Lysik=D0=BEv?=
 <alexander.lysikov@demlabs.net>
Date: Fri, 25 Sep 2020 00:46:40 +0500
Subject: [PATCH] fixed segmentation fault in sync process

---
 dap-sdk/net/core/dap_events_socket.c | 2 +-
 dap-sdk/net/core/dap_worker.c        | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index c7acd09a14..b84098efff 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -748,7 +748,7 @@ void dap_events_socket_set_writable_unsafe( dap_events_socket_t *sc, bool a_is_r
 
     sc->ev.events = events;
 
-    if (sc->worker && sc->server->type != DAP_SERVER_UDP)
+    if ((!sc->server && sc->worker) || (sc->worker && sc->server->type != DAP_SERVER_UDP))
         if ( epoll_ctl(sc->worker->epoll_fd, EPOLL_CTL_MOD, sc->socket, &sc->ev) ){
             int l_errno = errno;
             char l_errbuf[128];
diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c
index 969ce8d232..f872bacc4a 100644
--- a/dap-sdk/net/core/dap_worker.c
+++ b/dap-sdk/net/core/dap_worker.c
@@ -193,10 +193,10 @@ void *dap_worker_thread(void *arg)
                     break;
                     case DESCRIPTOR_TYPE_SOCKET:
                         l_must_read_smth = true;
-                        if (l_cur->server->type == DAP_SERVER_TCP) {
+                        if (!l_cur->server || l_cur->server->type == DAP_SERVER_TCP) {
                             l_bytes_read = recv(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
                                                 sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0);
-                        } else if (l_cur->server->type == DAP_SERVER_UDP) {
+                        } else if (l_cur->server && l_cur->server->type == DAP_SERVER_UDP) {
                             socklen_t l_size = sizeof(l_cur->remote_addr);
                             l_bytes_read = recvfrom(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
                                                     sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0,
@@ -311,10 +311,10 @@ void *dap_worker_thread(void *arg)
                 int l_errno;
                 switch (l_cur->type){
                     case DESCRIPTOR_TYPE_SOCKET:
-                        if (l_cur->server->type == DAP_SERVER_TCP) {
+                        if (!l_cur->server || l_cur->server->type == DAP_SERVER_TCP) {
                             l_bytes_sent = send(l_cur->socket, (const char *)l_cur->buf_out,
                                                 l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL);
-                        } else if (l_cur->server->type == DAP_SERVER_UDP) {
+                        } else if (l_cur->server && l_cur->server->type == DAP_SERVER_UDP) {
                             l_bytes_sent = sendto(l_cur->socket, (const char *)l_cur->buf_out,
                                                   l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL,
                                                   (struct sockaddr *)&l_cur->remote_addr, sizeof(l_cur->remote_addr));
-- 
GitLab