<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/120021>120021</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [lldb] Debugger::IOHandlerThread accessing invalid fd causes python crash
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lldb
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          slydiman
      </td>
    </tr>
</table>

<pre>
    Sometimes we got an unexpected fail of the test `UNRESOLVED: lldb-api::TestIOHandlerResizeNoEditline.py` on Windows host.
https://lab.llvm.org/staging/#/builders/197/builds/1562
https://lab.llvm.org/staging/#/builders/197/builds/1541
https://lab.llvm.org/staging/#/builders/197/builds/1512
The exit code 0xC0000409 means an assert/exception inside the native python code.

I already fixed the test `lldb-api::TestModuleLoadedNotifys.py` for Windows #92286.
But this test still crashes sometimes on the last line `dbg.GetInputFile().Close()` with the following exception inside CRT:
```
Exception Code: 0x80000003
 #0 0x00007ffb4842e03d (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x14e03d)
 #1 0x00007ffb4842e4f5 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x14e4f5)
 #2 0x00007ffb28a29f09 lldb_private::NativeFile::GetStream(void) D:\llvm-project\lldb\source\Host\common\File.cpp:292:0
 #3 0x00007ffb289af668 lldb_private::IOHandler::GetInputFILE(void) D:\llvm-project\lldb\source\Core\IOHandler.cpp:92:0
 #4 0x00007ffb289b0988 lldb_private::IOHandlerEditline::GetLine(class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>> &, bool &) D:\llvm-project\lldb\source\Core\IOHandler.cpp:385:0
 #5 0x00007ffb289b034e lldb_private::IOHandlerEditline::Run(void) D:\llvm-project\lldb\source\Core\IOHandler.cpp:596:0
 #6 0x00007ffb28887c68 lldb_private::Debugger::RunIOHandlers(void) D:\llvm-project\lldb\source\Core\Debugger.cpp:1118:0
 #7 0x00007ffb2888a644 lldb_private::Debugger::IOHandlerThread(void) D:\llvm-project\lldb\source\Core\Debugger.cpp:2052:0
 #8 0x00007ffb2888ebb7 `lldb_private::Debugger::StartIOHandlerThread'::`5'::<lambda_1>::operator() D:\llvm-project\lldb\source\Core\Debugger.cpp:2163:0
 #9 0x00007ffb2889b7c4 std::invoke<`lldb_private::Debugger::StartIOHandlerThread'::`5'::<lambda_1> &> C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433\include\type_traits:1696:0
#10 0x00007ffb2888ef8b std::_Func_impl_no_alloc<`lldb_private::Debugger::StartIOHandlerThread'::`5'::<lambda_1>,unsigned int>::_Do_call C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433\include\functional:878:0
#11 0x00007ffb28a82f80 std::_Func_class<unsigned int>::operator()(void) const C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433\include\functional:921:0
#12 0x00007ffb28a82e0c lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void *) D:\llvm-project\lldb\source\Host\common\HostNativeThreadBase.cpp:62:0
#13 0x00007ffb48393010 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0xb3010)
#14 0x00007ffb774c4cb0 (C:\WINDOWS\System32\KERNEL32.DLL+0x14cb0)
#15 0x00007ffb78a1edcb (C:\WINDOWS\SYSTEM32\ntdll.dll+0x7edcb)
```
It seems `Debugger::IOHandlerThread` is using an invalid (already closed) m_descriptor in the line `m_descriptor = ::_dup(m_descriptor);` inside `NativeFile::GetStream()` and python crashes handling a CRT exception (invalid fd). 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEV19z26ge_TT4hakHgSRLD35wZLvN3DS9E-e2c588CJDNLhIagRx7P_0OSFZkN5tu23Q3kxkLgQ7n95cDNUbuKiHmILoB0XJCW7vXzdyoE5clrSa55qf5RpfCylIY-CTgTltIK9hW4lgLZgWHBZUK6gLavYBWGAtBjP53_7DafLr7vFoCsoBK8fwdrSUgC0AWj8LY208faMWVaB6EkX-Ie73i0ipZiWl9AjGCuoJfZMX1k4F7bewUoMXe2to4BLwGeK1oPlXqUE51swN4bSzdyWrn5wjA67yViovGALwO0tn5hR9GMX5LtDB4S7TAcXvcCyiO0kKmuYDomCGEUIhSWApaGed9aoxoLMBrcWSitlJXUFZGcuGDUFErDwLWJ7vXlQdx_gNocQupagTlJ1jIo-AXEfs6Rh81b5W405QLfq-tLE6mj06hmyE8AJMU4yR2W9y0Ftq9NB2osVIpyBpq9sJAMySRrvzGihoLXcjd7jzfTd8Le1vVrV1LJQBOAE6nmdKmf3b7Pkm7998WWin9JKsd_MoB2cOjMwEtQIz6f7RYDasyzYVLSXRMkP8jAC2cEQiioxvPiiIPkxALRDgEOMkcWpR9ub1ffvqyAVG2-f_mcfWRYBBlLWtsTo3gU64UwDfoGITuO0e3Qw2uUcMi-iHUsIieUfEIFScUpwVKfZFt60YeqBVdEO99Hnh3-vF7YTe2EbQEODlo6WjCZUfEpeu7utG_CWb9kOcgyoxuGyZAlH3Qxr1muix1BaLMYU5ZXQOywCkGZIF6ZuSCWUqLOE5eYDaU_0Csi_zt3eq7uWW6cT8DZM_rglZ4SStHafIqrXM3GujduQFOmKLGQGN5N5FTI9nW2MaVN8nYnjYAZ9DYpmX2eZl7v7UNldacV5GVW3gFR5XSjFrdjFaRFQQ4dotzrVX3_JOeIUk0ck107RoSir_vmoe2equARWk8ohVf0EqSGXsxkZYib3e7cx49tNWAan6U1xmypxUEQTLiNbviReMw_CavgdTj3rXfN2KGUTTO8eSKmcjz2bmxv0ZuY2ljv2I46yZBjKLnAckULXNOt4FPTfdO16LxKeub9M_ZE8RkZE96aU-az1j4XCuyOujfBSDZL7TQVxtZwb5Z_7fRu4aW0DU_A6Lso2SNNrqw8LM0LVVwY1suNYgyjDD2ZpZlW0l7AlH2OQNR9qi18l9u_DAIpyGekjAkBESZrJhqufOLPdVi6BeLIB4Kwx0o6DrMRZI_u2W7biu2lWWttpXe-obya30EcNZWXkNyKCs75MV2qbeMKvWPO69oK-ZOeqoAWSSzZOS64PLYTHCRoGvX-ZYMyMtGXSb7qIyZroz9d01NcTAyFV-bKhB7oU25c71TCV3Eb6jpZ7px1ghqxWNDy1qr7gh0JkOAFz8uHl7atG8BMR7ZQC60E0kJCtD3a6fcfdZJJwc6VgKzWchClv8F6MlYUXrQ_6we7ld3BE-Xd3e9HmP5CHN8hM4SGgjO8m8RrSxXaiA5c5_0gCPZemuhEaI0ro2_fqLECEoDW-MkMXVa-ECVj1NyVvzMSWmfrOWWC8MaWVvdQNmL8V6HX8wBsoR9bfC2BjgZzzq25MZv3AlvEKPXBGcv4WnFh4tJfzPYO0s8cSfeR4oe4ORsSOGYT-GEzwlPSUonYh7MSEhQiONksp8HLApDEgYRiuKAxEFUsBnGPE3jME7CkE_kHCMcBjiIXCNAyTQWuAhiEkUcU4xEDkIkSirVcHObSGNaMQ8wQjiYKJoLZfw1GWOf4a50l5Nm7rM_b3cGhEhJY80zgpVW-at1VxJL-GoQIWVMGB_CZ7Mho60R5sJnk7ZR88sr507afZtPmS7d_VMdzj9DWeK1N8ffMjuLDnP8ZwAAAP__Hr3k0w">