diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 9ed2fa9ee5..7c698dafda 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -193,6 +193,7 @@ std::optional asst::Controller::call_command(const std::string& cmd std::optional> sock_buffer; auto start_time = steady_clock::now(); + std::unique_lock callcmd_lock(m_callcmd_mutex); #ifdef _WIN32 @@ -337,7 +338,6 @@ std::optional asst::Controller::call_command(const std::string& cmd // AcceptEx, client_socker is connected and first chunk of data is received DWORD len = 0; if (GetOverlappedResult(reinterpret_cast(m_server_sock), &sockov, &len, FALSE)) { - // unlock after accept accept_pending = false; if (recv_by_socket) sock_data.insert(sock_data.end(), sock_buffer.value().get(), sock_buffer.value().get() + len); @@ -433,6 +433,8 @@ std::optional asst::Controller::call_command(const std::string& cmd } #endif + callcmd_lock.unlock(); + auto duration = duration_cast(steady_clock::now() - start_time).count(); Log.info("Call `", cmd, "` ret", exit_ret, ", cost", duration, "ms , stdout size:", pipe_data.size(), ", socket size:", sock_data.size()); diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 352dfcf23e..837b619435 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -106,6 +106,8 @@ namespace asst void* m_callback_arg = nullptr; std::minstd_rand m_rand_engine; + + std::mutex m_callcmd_mutex; #ifdef _WIN32 ASST_AUTO_DEDUCED_ZERO_INIT_START