diff options
author | Hannes Domani <ssbssa@yahoo.de> | 2020-05-25 00:18:25 +0200 |
---|---|---|
committer | Hannes Domani <ssbssa@yahoo.de> | 2020-05-27 19:20:01 +0200 |
commit | 6479bf854a468c0270bb0fcdc9d0271cca3eb5b5 (patch) | |
tree | 653c599a9ba675c34edcc46c90fdc8cdd97ada4e /gdbserver/win32-low.cc | |
parent | ac637ec30dd9a3b19a02d1967a80e4ddf739706e (diff) | |
download | gdb-6479bf854a468c0270bb0fcdc9d0271cca3eb5b5.zip gdb-6479bf854a468c0270bb0fcdc9d0271cca3eb5b5.tar.gz gdb-6479bf854a468c0270bb0fcdc9d0271cca3eb5b5.tar.bz2 |
Don't close process handle provided by WaitForDebugEvent
Only the process handle returned by OpenProcess or CreateProcess needs to
be closed, the one provided by WaitForDebugEvent is closed automatically.
gdbserver/ChangeLog:
2020-05-27 Hannes Domani <ssbssa@yahoo.de>
* win32-low.cc (do_initial_child_stuff): Set open_process_used.
(win32_clear_inferiors): Use open_process_used.
(get_child_debug_event): Likewise.
Diffstat (limited to 'gdbserver/win32-low.cc')
-rw-r--r-- | gdbserver/win32-low.cc | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index d5555a7..a42fe25 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -88,6 +88,9 @@ static int soft_interrupt_requested = 0; by suspending all the threads. */ static int faked_breakpoint = 0; +/* True if current_process_handle needs to be closed. */ +static bool open_process_used = false; + #ifdef __x86_64__ bool wow64_process = false; #endif @@ -383,6 +386,7 @@ do_initial_child_stuff (HANDLE proch, DWORD pid, int attached) soft_interrupt_requested = 0; faked_breakpoint = 0; + open_process_used = true; memset (¤t_event, 0, sizeof (current_event)); @@ -859,8 +863,11 @@ windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus) static void win32_clear_inferiors (void) { - if (current_process_handle != NULL) - CloseHandle (current_process_handle); + if (open_process_used) + { + CloseHandle (current_process_handle); + open_process_used = false; + } for_each_thread (delete_thread_info); siginfo_er.ExceptionCode = 0; @@ -1513,6 +1520,12 @@ get_child_debug_event (DWORD *continue_status, (unsigned) current_event.dwThreadId)); CloseHandle (current_event.u.CreateProcessInfo.hFile); + if (open_process_used) + { + CloseHandle (current_process_handle); + open_process_used = false; + } + current_process_handle = current_event.u.CreateProcessInfo.hProcess; main_thread_id = current_event.dwThreadId; @@ -1560,8 +1573,6 @@ get_child_debug_event (DWORD *continue_status, } } child_continue (DBG_CONTINUE, desired_stop_thread_id); - CloseHandle (current_process_handle); - current_process_handle = NULL; break; case LOAD_DLL_DEBUG_EVENT: |