mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 09:50:40 +08:00
fix: 修复一个死锁问题
by socket 时,这行逻辑会引发死锁
if (is_reconnect_success) {
auto recall_ret = call_command(cmd, timeout, false /* 禁止重连避免无限递归 */, recv_by_socket);
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user