diff --git a/3rdparty/cuttdb/src/cdb_bgtask.c b/3rdparty/cuttdb/src/cdb_bgtask.c
index da998c2b0a0f164350186c74e1bed80f95f5d633..a103c5f8d8acc632e7899b3c05b286028bdeb0bb 100644
--- a/3rdparty/cuttdb/src/cdb_bgtask.c
+++ b/3rdparty/cuttdb/src/cdb_bgtask.c
@@ -15,6 +15,7 @@
 
 #include "cdb_bgtask.h"
 #include <stdlib.h>
+#include <errno.h>
 #ifndef _WIN32
 #include <sys/signal.h>
 #else
@@ -69,6 +70,7 @@ static void *_cdb_bgtask_func(void *arg)
     while(bt->run) {
         time_t now = time(NULL);
         struct timespec timeout;
+        int l_cond_rc;
 
         /* check should run some tasks every 1 second */
         timeout.tv_sec = now + 1;
@@ -82,7 +84,9 @@ static void *_cdb_bgtask_func(void *arg)
                 task->ltime = now;
             }
         }
-        pthread_cond_timedwait(&bt->scond, &bt->smutex, &timeout);
+        pthread_mutex_lock(&bt->smutex);
+        l_cond_rc = pthread_cond_timedwait(&bt->scond, &bt->smutex, &timeout);
+        pthread_mutex_unlock(&bt->smutex);
     }
 
     return NULL;
diff --git a/dap-sdk/net/core/dap_events.c b/dap-sdk/net/core/dap_events.c
index 0f3d96c544f6c1086c02fecd70782fd4f9b15486..0228f5b783da4bde285bc17092b98a73ea78e856 100644
--- a/dap-sdk/net/core/dap_events.c
+++ b/dap-sdk/net/core/dap_events.c
@@ -430,8 +430,6 @@ static void *thread_worker_function(void *arg)
                 }
             }
 
-            pthread_mutex_lock(&w->locker_on_count);
-
             if((cur->flags & DAP_SOCK_SIGNAL_CLOSE) && !cur->no_close) {
                 // protect against double deletion
                 cur->kill_signal = true;
@@ -442,11 +440,8 @@ static void *thread_worker_function(void *arg)
             if(cur->kill_signal) {
                 log_it(L_INFO, "Kill %u socket (processed).... [ thread %u ]", cur->socket, tn);
                 dap_events_socket_remove(cur);
-                pthread_mutex_unlock(&w->locker_on_count);
                 dap_events_socket_delete( cur, true);
             }
-            else
-                pthread_mutex_unlock(&w->locker_on_count);
 
             /*
             if(!w->event_to_kill_count) {
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index 1510d671b88134231a8e7f1c193380b9677b8a64..c73c4d00390b4104b93806d33074a6e162415820 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -274,9 +274,7 @@ int dap_events_socket_kill_socket( dap_events_socket_t *a_es )
 
   //dap_events_t *d_ev = w->events;
 
-  pthread_mutex_lock( &a_es->dap_worker->locker_on_count );
   if ( a_es->kill_signal ) {
-    pthread_mutex_unlock( &a_es->dap_worker ->locker_on_count );
     return 0;
   }
 
@@ -285,7 +283,6 @@ int dap_events_socket_kill_socket( dap_events_socket_t *a_es )
   a_es->kill_signal = true;
   //DL_LIST_ADD_NODE_HEAD( d_ev->to_kill_sockets, a_es, kprev, knext, w->event_to_kill_count );
 
-  pthread_mutex_unlock( &a_es->dap_worker->locker_on_count );
   return 0;
 }
 
@@ -333,6 +330,7 @@ void dap_events_socket_delete( dap_events_socket_t *a_es, bool preserve_inherito
  */
 void dap_events_socket_remove( dap_events_socket_t *a_es)
 {
+  pthread_mutex_lock(&a_es->dap_worker->locker_on_count);
   if ( epoll_ctl( a_es->dap_worker->epoll_fd, EPOLL_CTL_DEL, a_es->socket, &a_es->ev) == -1 )
      log_it( L_ERROR,"Can't remove event socket's handler from the epoll_fd" );
   else
@@ -340,10 +338,12 @@ void dap_events_socket_remove( dap_events_socket_t *a_es)
 
   DL_DELETE( a_es->events->dlsockets, a_es );
   a_es->dap_worker->event_sockets_count --;
+  pthread_mutex_unlock(&a_es->dap_worker->locker_on_count);
 }
 
 void dap_events_socket_remove_and_delete( dap_events_socket_t *a_es,  bool preserve_inheritor )
 {
+  pthread_mutex_lock(&a_es->dap_worker->locker_on_count);
   if ( epoll_ctl( a_es->dap_worker->epoll_fd, EPOLL_CTL_DEL, a_es->socket, &a_es->ev) == -1 )
      log_it( L_ERROR,"Can't remove event socket's handler from the epoll_fd" );
   else
@@ -351,6 +351,7 @@ void dap_events_socket_remove_and_delete( dap_events_socket_t *a_es,  bool prese
 
   DL_DELETE( a_es->events->dlsockets, a_es );
   a_es->dap_worker->event_sockets_count --;
+  pthread_mutex_unlock(&a_es->dap_worker->locker_on_count);
 
   dap_events_socket_delete( a_es, preserve_inheritor );
 }
diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c
index 3f47e681ec9f61d8287a676eb0a21113593c7687..bbc3bbd5e526c50636b85f3bec4531814a7a8e32 100644
--- a/dap-sdk/net/core/dap_server.c
+++ b/dap-sdk/net/core/dap_server.c
@@ -642,6 +642,7 @@ void  *thread_loop( void *arg )
   CPU_SET( tn, &mask );
 
   int err;
+  int l_sock_err = 0, l_sock_err_size = sizeof(l_sock_err);
 #ifndef ANDROID
   err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &mask);
 #else
@@ -690,7 +691,8 @@ void  *thread_loop( void *arg )
 
       dap_cur->last_time_active = cur_time;
       if( events[i].events & EPOLLERR ) {
-          log_it( L_ERROR,"Socket error: %u, remove it" , dap_cur->socket );
+          getsockopt(dap_cur->socket, SOL_SOCKET, SO_ERROR, (void *)&l_sock_err, (socklen_t *)&l_sock_err_size);
+          log_it( L_ERROR,"Socket %u error: %s, remove it" , dap_cur->socket, strerror(l_sock_err));
           dap_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
       }
       set_nonblock_socket(dap_cur->socket);
diff --git a/dap-sdk/net/core/include/dap_events.h b/dap-sdk/net/core/include/dap_events.h
index 149784bdca53d168ee0dc58f3feabb5e3f9dcc38..e7b7777b1087b98c104d33bc0c91860f0d8b4d4d 100644
--- a/dap-sdk/net/core/include/dap_events.h
+++ b/dap-sdk/net/core/include/dap_events.h
@@ -28,6 +28,7 @@
 
 #include <stdint.h>
 #include <pthread.h>
+#include <stdatomic.h>
 #define EPOLL_HANDLE  int
 #else
 #define EPOLL_HANDLE  HANDLE
@@ -62,7 +63,7 @@ typedef struct dap_events {
 
 typedef struct dap_worker
 {
-  uint32_t event_sockets_count;
+  atomic_uint event_sockets_count;
   //uint32_t event_to_kill_count;
 
   EPOLL_HANDLE epoll_fd;
diff --git a/dap-sdk/net/core/include/dap_events_socket.h b/dap-sdk/net/core/include/dap_events_socket.h
index 66cf438a94aadee7dcabf4cec23c06a902a9a536..99ebe57b2bc355c41ecf4545b16a6547867bae23 100644
--- a/dap-sdk/net/core/include/dap_events_socket.h
+++ b/dap-sdk/net/core/include/dap_events_socket.h
@@ -26,6 +26,7 @@
 #include <stdint.h>
 #include <stddef.h>
 #include <stdbool.h>
+#include <stdatomic.h>
 #include "uthash.h"
 #ifndef _WIN32
 #include <sys/epoll.h>
@@ -103,7 +104,7 @@ typedef struct dap_events_socket {
   uint32_t  flags;
 //  bool signal_close;
   bool no_close;
-  bool kill_signal;
+  atomic_bool kill_signal;
 //  bool _ready_to_write;
 //  bool _ready_to_read;