diff --git a/common/cpp/include/asapo/request/request_handler.h b/common/cpp/include/asapo/request/request_handler.h
index 6a5289bd1b7059d79c229fe324ee7ed3bcec10d6..9257f3b9600901fbac3c9c7ab13d3a6d660320f4 100644
--- a/common/cpp/include/asapo/request/request_handler.h
+++ b/common/cpp/include/asapo/request/request_handler.h
@@ -14,7 +14,7 @@ class RequestHandler {
     virtual void PrepareProcessingRequestLocked()  = 0;
     virtual void TearDownProcessingRequestLocked(bool success)  = 0;
     virtual bool ProcessRequestUnlocked(GenericRequest* request, bool* retry)  = 0;
-    virtual void ProcessRequestTimeout(GenericRequest* request)  = 0;
+    virtual void ProcessRequestTimeoutUnlocked(GenericRequest* request)  = 0;
     virtual bool ReadyProcessRequest() = 0;
     virtual ~RequestHandler() = default;
 };
diff --git a/common/cpp/src/request/request_pool.cpp b/common/cpp/src/request/request_pool.cpp
index dc2573b67c47bac923fe8ff8843eeed50a38fe44..32d0cd99943b67e3cdea3e9b5bbefa60b0e3e981 100644
--- a/common/cpp/src/request/request_pool.cpp
+++ b/common/cpp/src/request/request_pool.cpp
@@ -107,7 +107,9 @@ void RequestPool::ProcessRequest(const std::unique_ptr<RequestHandler> &request_
                                  ThreadInformation* thread_info) {
     auto request = GetRequestFromQueue();
     if (request->TimedOut()) {
-        request_handler->ProcessRequestTimeout(request.get());
+        thread_info->lock.unlock();
+        request_handler->ProcessRequestTimeoutUnlocked(request.get());
+        thread_info->lock.lock();
         return;
     }
     request_handler->PrepareProcessingRequestLocked();
diff --git a/common/cpp/unittests/request/mocking.h b/common/cpp/unittests/request/mocking.h
index d3687f9469d568a1c831e1335d619b1a3dbbe935..d462be46e9a7fd209a1da79b2a43a48ae5c3d559 100644
--- a/common/cpp/unittests/request/mocking.h
+++ b/common/cpp/unittests/request/mocking.h
@@ -16,7 +16,8 @@ class MockRequestHandler : public RequestHandler {
     MOCK_METHOD0(ReadyProcessRequest, bool());
     MOCK_METHOD1(TearDownProcessingRequestLocked, void(bool processing_succeeded));
     MOCK_METHOD2(ProcessRequestUnlocked_t, bool (const GenericRequest* request, bool* retry));
-    MOCK_METHOD1(ProcessRequestTimeout, void(GenericRequest* request));
+    MOCK_METHOD1(ProcessRequestTimeoutUnlocked, void(GenericRequest* request))GenericRequest*
+  ;
     uint64_t retry_counter = 0;
     bool ProcessRequestUnlocked(GenericRequest* request, bool* retry)  override {
         retry_counter = request->GetRetryCounter();
diff --git a/producer/api/cpp/src/request_handler_filesystem.cpp b/producer/api/cpp/src/request_handler_filesystem.cpp
index 39a8c3d6935471e656d8a65ca8fecbb233c457e0..968c68b347f341af8ac71048e4092e54895be5ec 100644
--- a/producer/api/cpp/src/request_handler_filesystem.cpp
+++ b/producer/api/cpp/src/request_handler_filesystem.cpp
@@ -38,7 +38,7 @@ bool RequestHandlerFilesystem::ProcessRequestUnlocked(GenericRequest* request, b
     return true;
 }
 
-void RequestHandlerFilesystem::ProcessRequestTimeout(GenericRequest* request) {
+void RequestHandlerFilesystem::ProcessRequestTimeoutUnlocked(GenericRequest* request) {
     log__->Error("request timeout, id:" + std::to_string(request->header.data_id) + " to " + request->header.stream +
                  " stream");
 }
diff --git a/producer/api/cpp/src/request_handler_filesystem.h b/producer/api/cpp/src/request_handler_filesystem.h
index bbb5250c7fb95f41fbefdd3ec12d1e7c27564914..15dc03e563bb6ca0cc0bb6374bbf5ad0205e9d64 100644
--- a/producer/api/cpp/src/request_handler_filesystem.h
+++ b/producer/api/cpp/src/request_handler_filesystem.h
@@ -23,7 +23,7 @@ class RequestHandlerFilesystem: public RequestHandler {
     };
     void PrepareProcessingRequestLocked()  override {};
     void TearDownProcessingRequestLocked(bool request_processed_successfully)  override {};
-    void ProcessRequestTimeout(GenericRequest* request)  override;
+    void ProcessRequestTimeoutUnlocked(GenericRequest* request)  override;
 
     virtual ~RequestHandlerFilesystem() = default;
     std::unique_ptr<IO> io__;
diff --git a/producer/api/cpp/src/request_handler_tcp.cpp b/producer/api/cpp/src/request_handler_tcp.cpp
index 85895cfd06c37dcd4257ad88c2c6bbf1d5be75e4..9be95ddd219f83c025a6f36caac4119c65efd22e 100644
--- a/producer/api/cpp/src/request_handler_tcp.cpp
+++ b/producer/api/cpp/src/request_handler_tcp.cpp
@@ -307,7 +307,7 @@ void RequestHandlerTcp::TearDownProcessingRequestLocked(bool request_processed_s
     }
 }
 
-void RequestHandlerTcp::ProcessRequestTimeout(GenericRequest* request) {
+void RequestHandlerTcp::ProcessRequestTimeoutUnlocked(GenericRequest* request) {
     auto producer_request = static_cast<ProducerRequest*>(request);
     auto err_string = "request id:" + std::to_string(request->header.data_id) + ", opcode: " + std::to_string(
         request->header.op_code) + " for " + request->header.stream +
diff --git a/producer/api/cpp/src/request_handler_tcp.h b/producer/api/cpp/src/request_handler_tcp.h
index a891a81d5e139da8c60f00d98997cb8c70e2ea1e..7b8e6187480bf0e0452a1affbc719fb9839db2ea 100644
--- a/producer/api/cpp/src/request_handler_tcp.h
+++ b/producer/api/cpp/src/request_handler_tcp.h
@@ -23,7 +23,7 @@ class RequestHandlerTcp: public RequestHandler {
     bool ReadyProcessRequest() override;
     void PrepareProcessingRequestLocked()  override;
     void TearDownProcessingRequestLocked(bool request_processed_successfully)  override;
-    void ProcessRequestTimeout(GenericRequest* request)  override;
+    void ProcessRequestTimeoutUnlocked(GenericRequest* request)  override;
 
     virtual ~RequestHandlerTcp() = default;
     std::unique_ptr<IO> io__;
diff --git a/producer/api/cpp/unittests/test_request_handler_tcp.cpp b/producer/api/cpp/unittests/test_request_handler_tcp.cpp
index 1d7b812cd1e88df4915b65a83639774ef8ececb8..9066b904493af1df5a095a28abdcf1cdc0f55981 100644
--- a/producer/api/cpp/unittests/test_request_handler_tcp.cpp
+++ b/producer/api/cpp/unittests/test_request_handler_tcp.cpp
@@ -974,7 +974,7 @@ TEST_F(RequestHandlerTcpTests, TimeoutCallsCallback) {
         HasSubstr("stream"))
     ));
 
-    request_handler.ProcessRequestTimeout(&request);
+    request_handler.ProcessRequestTimeoutUnlocked(&request);
 
     ASSERT_THAT(callback_err, Eq(asapo::ProducerErrorTemplates::kTimeout));
     ASSERT_THAT(callback_called, Eq(true));
diff --git a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp
index 0f8f387faf1d2bd20490a4e6b409612b1c81e81d..1529dc7ff4dfa201e0ee0c224fcb2ea3f0dde6e4 100644
--- a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp
+++ b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp
@@ -86,7 +86,7 @@ void ReceiverDataServerRequestHandler::TearDownProcessingRequestLocked(bool /*pr
 // do nothing
 }
 
-void ReceiverDataServerRequestHandler::ProcessRequestTimeout(GenericRequest* /*request*/) {
+void ReceiverDataServerRequestHandler::ProcessRequestTimeoutUnlocked(GenericRequest* /*request*/) {
 // do nothing
 }
 
diff --git a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h
index 18fc5937a793c9358376d24ec0480496ce93e88a..952cb1cb78e83b6c92ecd142e7f6761a6b086a44 100644
--- a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h
+++ b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h
@@ -17,7 +17,7 @@ class ReceiverDataServerRequestHandler: public RequestHandler {
     bool ReadyProcessRequest() override;
     void PrepareProcessingRequestLocked()  override;
     void TearDownProcessingRequestLocked(bool processing_succeeded)  override;
-    void ProcessRequestTimeout(GenericRequest* request)  override;
+    void ProcessRequestTimeoutUnlocked(GenericRequest* request)  override;
 
     const AbstractLogger* log__;
     Statistics* statistics__;