aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Domani <ssbssa@yahoo.de>2020-05-24 22:59:33 +0200
committerHannes Domani <ssbssa@yahoo.de>2020-05-27 19:15:53 +0200
commitac637ec30dd9a3b19a02d1967a80e4ddf739706e (patch)
treea30550c2b68d8865e23bb924a9b121e89b7f86b4
parent198204a7f0255c0e25dcda6b7d6a72e666d689c1 (diff)
downloadgdb-ac637ec30dd9a3b19a02d1967a80e4ddf739706e.zip
gdb-ac637ec30dd9a3b19a02d1967a80e4ddf739706e.tar.gz
gdb-ac637ec30dd9a3b19a02d1967a80e4ddf739706e.tar.bz2
Don't close thread handles provided by WaitForDebugEvent
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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/nat/windows-nat.c1
2 files changed, 5 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0879dfa..08641e5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index 8c2092a..709a9d3 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -51,7 +51,6 @@ bool ignore_first_breakpoint = false;
windows_thread_info::~windows_thread_info ()
{
- CloseHandle (h);
}
void