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

Reply via email to