https://github.com/Nerixyz created https://github.com/llvm/llvm-project/pull/176775
In https://github.com/llvm/llvm-project/pull/175837#issuecomment-3749408432 I mentioned that any handles that were previously opened and haven't been closed since, won't be closed in the destructor nor in `OpenPseudoConsole`. In this PR, I added `Close` calls to these methods. Calling `Close()` is a no-op if the handles are invalid. >From 8e30d8afa0dae46152043f633b02ee21a92aa539 Mon Sep 17 00:00:00 2001 From: Nerixyz <[email protected]> Date: Mon, 19 Jan 2026 16:50:12 +0100 Subject: [PATCH] [LLDB] Close previously opened handles in `PseudoConsole` --- lldb/include/lldb/Host/windows/PseudoConsole.h | 8 ++++++++ lldb/source/Host/windows/PseudoConsole.cpp | 13 +++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lldb/include/lldb/Host/windows/PseudoConsole.h b/lldb/include/lldb/Host/windows/PseudoConsole.h index c3bf817cf831d..039783985c025 100644 --- a/lldb/include/lldb/Host/windows/PseudoConsole.h +++ b/lldb/include/lldb/Host/windows/PseudoConsole.h @@ -21,6 +21,14 @@ namespace lldb_private { class PseudoConsole { public: + PseudoConsole() = default; + ~PseudoConsole(); + + PseudoConsole(const PseudoConsole &) = delete; + PseudoConsole(PseudoConsole &&) = delete; + PseudoConsole &operator=(const PseudoConsole &) = delete; + PseudoConsole &operator=(PseudoConsole &&) = delete; + llvm::Error OpenPseudoConsole(); /// Close the ConPTY, its read/write handles and invalidate them. diff --git a/lldb/source/Host/windows/PseudoConsole.cpp b/lldb/source/Host/windows/PseudoConsole.cpp index 9204488930a3e..b3314fd58bbb8 100644 --- a/lldb/source/Host/windows/PseudoConsole.cpp +++ b/lldb/source/Host/windows/PseudoConsole.cpp @@ -64,10 +64,16 @@ struct Kernel32 { static Kernel32 kernel32; +PseudoConsole::~PseudoConsole() { Close(); } + llvm::Error PseudoConsole::OpenPseudoConsole() { if (!kernel32.IsConPTYAvailable()) return llvm::make_error<llvm::StringError>("ConPTY is not available", llvm::errc::io_error); + + // close any previously opened handles + Close(); + HRESULT hr; HANDLE hInputRead = INVALID_HANDLE_VALUE; HANDLE hInputWrite = INVALID_HANDLE_VALUE; @@ -118,8 +124,11 @@ llvm::Error PseudoConsole::OpenPseudoConsole() { void PseudoConsole::Close() { if (m_conpty_handle != INVALID_HANDLE_VALUE) kernel32.ClosePseudoConsole(m_conpty_handle); - CloseHandle(m_conpty_input); - CloseHandle(m_conpty_output); + if (m_conpty_input != INVALID_HANDLE_VALUE) + CloseHandle(m_conpty_input); + if (m_conpty_output != INVALID_HANDLE_VALUE) + CloseHandle(m_conpty_output); + m_conpty_handle = INVALID_HANDLE_VALUE; m_conpty_input = INVALID_HANDLE_VALUE; m_conpty_output = INVALID_HANDLE_VALUE; _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
