https://github.com/lb90 updated https://github.com/llvm/llvm-project/pull/165281
>From 76cf6d15c7cd4592fdcab4d79b31bc9b640fe727 Mon Sep 17 00:00:00 2001 From: Luca Bacci <[email protected]> Date: Mon, 27 Oct 2025 18:06:40 +0100 Subject: [PATCH] [LLDB][Windows]: Don't pass duplicate HANDLEs to CreateProcess Fixes https://github.com/msys2/MINGW-packages/issues/26030 --- .../Host/windows/ProcessLauncherWindows.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lldb/source/Host/windows/ProcessLauncherWindows.cpp b/lldb/source/Host/windows/ProcessLauncherWindows.cpp index f5adadaf061bf..e1b4b7e48c5a6 100644 --- a/lldb/source/Host/windows/ProcessLauncherWindows.cpp +++ b/lldb/source/Host/windows/ProcessLauncherWindows.cpp @@ -16,6 +16,7 @@ #include "llvm/Support/Program.h" #include <string> +#include <unordered_set> #include <vector> using namespace lldb; @@ -91,13 +92,13 @@ ProcessLauncherWindows::LaunchProcess(const ProcessLaunchInfo &launch_info, startupinfo.hStdOutput = stdout_handle ? stdout_handle : ::GetStdHandle(STD_OUTPUT_HANDLE); - std::vector<HANDLE> inherited_handles; + std::unordered_set<HANDLE> inherited_handles; if (startupinfo.hStdError) - inherited_handles.push_back(startupinfo.hStdError); + inherited_handles.insert(startupinfo.hStdError); if (startupinfo.hStdInput) - inherited_handles.push_back(startupinfo.hStdInput); + inherited_handles.insert(startupinfo.hStdInput); if (startupinfo.hStdOutput) - inherited_handles.push_back(startupinfo.hStdOutput); + inherited_handles.insert(startupinfo.hStdOutput); SIZE_T attributelist_size = 0; InitializeProcThreadAttributeList(/*lpAttributeList=*/nullptr, @@ -120,13 +121,15 @@ ProcessLauncherWindows::LaunchProcess(const ProcessLaunchInfo &launch_info, const FileAction *act = launch_info.GetFileActionAtIndex(i); if (act->GetAction() == FileAction::eFileActionDuplicate && act->GetFD() == act->GetActionArgument()) - inherited_handles.push_back(reinterpret_cast<HANDLE>(act->GetFD())); + inherited_handles.insert(reinterpret_cast<HANDLE>(act->GetFD())); } if (!inherited_handles.empty()) { + std::vector<HANDLE> handles(inherited_handles.begin(), + inherited_handles.end()); if (!UpdateProcThreadAttribute( startupinfoex.lpAttributeList, /*dwFlags=*/0, - PROC_THREAD_ATTRIBUTE_HANDLE_LIST, inherited_handles.data(), - inherited_handles.size() * sizeof(HANDLE), + PROC_THREAD_ATTRIBUTE_HANDLE_LIST, handles.data(), + handles.size() * sizeof(HANDLE), /*lpPreviousValue=*/nullptr, /*lpReturnSize=*/nullptr)) { error = Status(::GetLastError(), eErrorTypeWin32); return HostProcess(); _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
