Don't close thread handles provided by WaitForDebugEvent
authorHannes Domani <ssbssa@yahoo.de>
Sun, 24 May 2020 20:59:33 +0000 (22:59 +0200)
committerHannes Domani <ssbssa@yahoo.de>
Wed, 27 May 2020 17:15:53 +0000 (19:15 +0200)
I sometimes encountered a weird breakpoint failure when using start:

(gdb) start
Temporary breakpoint 2 at 0x40162d: file gdb-25911.c, line 4.
Starting program: C:\src\tests\gdb-25911.exe
Warning:
Cannot insert breakpoint 2.
Cannot access memory at address 0x401628

After trying a lot of combinations, I found a way to reproduce it:

(gdb) file gdb-25987.exe
Reading symbols from gdb-25987.exe...
(gdb) start
Temporary breakpoint 1 at 0x401638: file gdb-25987.cpp, line 13.
Starting program: C:\src\tests\gdb-25987.exe

Temporary breakpoint 1, main () at gdb-25987.cpp:13
13      int main() {
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
MyClass::call (this=0x3d20d0) at gdb-25987.cpp:8
8           *(char*)(nullptr) = 1;
(gdb) kill
Kill the program being debugged? (y or n) y
[Inferior 1 (process 1140) killed]
(gdb) file gdb-25911.exe
Load new symbol table from "gdb-25911.exe"? (y or n) y
Reading symbols from gdb-25911.exe...
(gdb) start
Temporary breakpoint 2 at 0x40162d: file gdb-25911.c, line 4.
Starting program: C:\src\tests\gdb-25911.exe
Warning:
Cannot insert breakpoint 2.
Cannot access memory at address 0x401628

Command aborted.

The actual failure was that ReadProcessMemory used a process handle that
was no longer valid.
And the underlying reason was that the windows_thread_info destructor
closes a thread handle that was provided earlier by WaitForDebugEvent.

But since this is not allowed (and it was actually already closed at this
point, and the handle value reused), this closed another still-needed handle.

gdb/ChangeLog:

2020-05-27  Hannes Domani  <ssbssa@yahoo.de>

* nat/windows-nat.c (windows_thread_info::~windows_thread_info):
Don't close thread handle.

gdb/ChangeLog
gdb/nat/windows-nat.c

index 0879dfab5c5e13105e5225c5344ea7e9900e6745..08641e5721bb7ed75b96c6d45d5e4cd669d4d0e3 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-27  Hannes Domani  <ssbssa@yahoo.de>
+
+       * nat/windows-nat.c (windows_thread_info::~windows_thread_info):
+       Don't close thread handle.
+
 2020-05-27  Tom Tromey  <tom@tromey.com>
            Simon Marchi  <simon.marchi@efficios.com>
 
index 8c2092a51d709974b4e93515bf6b7b00133846dd..709a9d3a31b802893b34991e0e0f0cecd0102f5b 100644 (file)
@@ -51,7 +51,6 @@ bool ignore_first_breakpoint = false;
 
 windows_thread_info::~windows_thread_info ()
 {
-  CloseHandle (h);
 }
 
 void