From 407d91e0a9beb53c9735a85ce7619d532a57f276 Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <naeper@demlabs.net>
Date: Tue, 10 Aug 2021 17:30:11 +0700
Subject: [PATCH] [*] Fixed race lock

---
 CMakeLists.txt                | 2 +-
 dap-sdk/net/core/dap_worker.c | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 53bf8aa177..99bed70dc5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 3.0)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.9-23")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.9-24")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 set(DAPSDK_MODULES "")
 message("Cellframe modules: ${CELLFRAME_MODULES}")
diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c
index 680223d7e9..7e8b62bbe3 100644
--- a/dap-sdk/net/core/dap_worker.c
+++ b/dap-sdk/net/core/dap_worker.c
@@ -1099,6 +1099,7 @@ static bool s_socket_all_check_activity( void * a_arg)
     //log_it(L_DEBUG,"Check sockets activity on worker #%u at %s", l_worker->id, l_curtimebuf);
     pthread_rwlock_rdlock(&l_worker->esocket_rwlock);
     HASH_ITER(hh_worker, l_worker->esockets, l_es, tmp ) {
+        pthread_rwlock_unlock(&l_worker->esocket_rwlock);
         if ( l_es->type == DESCRIPTOR_TYPE_SOCKET_CLIENT  || l_es->type == DESCRIPTOR_TYPE_SOCKET_UDP ){
             if ( !(l_es->flags & DAP_SOCK_SIGNAL_CLOSE) &&
                  (  l_curtime >=  (l_es->last_time_active + s_connection_timeout) ) && !l_es->no_close ) {
@@ -1109,6 +1110,7 @@ static bool s_socket_all_check_activity( void * a_arg)
                 dap_events_socket_remove_and_delete_unsafe(l_es,false);
             }
         }
+        pthread_rwlock_rdlock(&l_worker->esocket_rwlock);
     }
     pthread_rwlock_unlock(&l_worker->esocket_rwlock);
     return true;
-- 
GitLab