fix: 修复一个死锁问题

by socket 时,这行逻辑会引发死锁

           if (is_reconnect_success) {
                auto recall_ret = call_command(cmd, timeout, false /* 禁止重连避免无限递归 */, recv_by_socket);
This commit is contained in:
MistEO
2022-10-11 02:16:44 +08:00
parent d13134dd4a
commit 019f219ef8
2 changed files with 0 additions and 6 deletions

View File

@@ -238,11 +238,8 @@ std::optional<std::string> asst::Controller::call_command(const std::string& cmd
OVERLAPPED sockov {};
SOCKET client_socket = INVALID_SOCKET;
std::unique_lock<std::mutex> socket_lock;
if (recv_by_socket) {
// acquire socket accept lock
socket_lock = std::unique_lock<std::mutex>(m_socket_mutex);
sock_buffer = asst::platform::single_page_buffer<char>();
sockov.hEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr);
client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
@@ -341,7 +338,6 @@ std::optional<std::string> asst::Controller::call_command(const std::string& cmd
DWORD len = 0;
if (GetOverlappedResult(reinterpret_cast<HANDLE>(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);