llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Nerixyz (Nerixyz) <details> <summary>Changes</summary> 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. --- Full diff: https://github.com/llvm/llvm-project/pull/176775.diff 2 Files Affected: - (modified) lldb/include/lldb/Host/windows/PseudoConsole.h (+8) - (modified) lldb/source/Host/windows/PseudoConsole.cpp (+11-2) ``````````diff 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; `````````` </details> https://github.com/llvm/llvm-project/pull/176775 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
