From 019f219ef8108dc7f731fc8103362fe2e031afba Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 11 Oct 2022 02:16:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=AD=BB=E9=94=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit by socket 时,这行逻辑会引发死锁 if (is_reconnect_success) { auto recall_ret = call_command(cmd, timeout, false /* 禁止重连避免无限递归 */, recv_by_socket); --- src/MeoAssistant/Controller.cpp | 4 ---- src/MeoAssistant/Controller.h | 2 -- 2 files changed, 6 deletions(-) diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 675ef6a2e8..9ed2fa9ee5 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -238,11 +238,8 @@ std::optional asst::Controller::call_command(const std::string& cmd OVERLAPPED sockov {}; SOCKET client_socket = INVALID_SOCKET; - std::unique_lock socket_lock; if (recv_by_socket) { - // acquire socket accept lock - socket_lock = std::unique_lock(m_socket_mutex); sock_buffer = asst::platform::single_page_buffer(); sockov.hEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr); client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); @@ -341,7 +338,6 @@ std::optional asst::Controller::call_command(const std::string& cmd DWORD len = 0; if (GetOverlappedResult(reinterpret_cast(m_server_sock), &sockov, &len, FALSE)) { // unlock after accept - socket_lock.unlock(); accept_pending = false; if (recv_by_socket) sock_data.insert(sock_data.end(), sock_buffer.value().get(), sock_buffer.value().get() + len); diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 19bc5a9590..352dfcf23e 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -106,8 +106,6 @@ namespace asst void* m_callback_arg = nullptr; std::minstd_rand m_rand_engine; - - std::mutex m_socket_mutex; #ifdef _WIN32 ASST_AUTO_DEDUCED_ZERO_INIT_START