diff options
author | Pedro Alves <palves@redhat.com> | 2007-12-03 01:10:30 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2007-12-03 01:10:30 +0000 |
commit | c436e841ffe6de640cb19bd7915d117309ed079e (patch) | |
tree | c315752cf01aa2a447c9b0969f0706c996a67626 /gdb/gdbserver/win32-low.c | |
parent | 0421e13edb5307146de9a31648f40218162145a6 (diff) | |
download | gdb-c436e841ffe6de640cb19bd7915d117309ed079e.zip gdb-c436e841ffe6de640cb19bd7915d117309ed079e.tar.gz gdb-c436e841ffe6de640cb19bd7915d117309ed079e.tar.bz2 |
* win32-low.h (win32_thread_info): Add descriptions to the
structure members. Replace `suspend_count' counter by a
`suspended' flag.
* win32-low.c (thread_rec): Update condition of when to get the
context from the inferior. Rely on ContextFlags being set if it
has already been retrieved. Only suspend the inferior thread if
we haven't already. Warn if that fails.
(continue_one_thread): s/suspend_count/suspended/. Only call
ResumeThread once. Warn if that fails.
Diffstat (limited to 'gdb/gdbserver/win32-low.c')
-rw-r--r-- | gdb/gdbserver/win32-low.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c index 188d555..cc95981 100644 --- a/gdb/gdbserver/win32-low.c +++ b/gdb/gdbserver/win32-low.c @@ -105,10 +105,19 @@ thread_rec (DWORD id, int get_context) return NULL; th = inferior_target_data (thread); - if (!th->suspend_count && get_context) + if (get_context && th->context.ContextFlags == 0) { - if (id != current_event.dwThreadId) - th->suspend_count = SuspendThread (th->h) + 1; + if (!th->suspended) + { + if (SuspendThread (th->h) == (DWORD) -1) + { + DWORD err = GetLastError (); + OUTMSG (("warning: SuspendThread failed in thread_rec, " + "(error %d): %s\n", (int) err, strwinerror (err))); + } + else + th->suspended = 1; + } (*the_low_target.get_thread_context) (th, ¤t_event); } @@ -259,10 +268,9 @@ continue_one_thread (struct inferior_list_entry *this_thread, void *id_ptr) struct thread_info *thread = (struct thread_info *) this_thread; int thread_id = * (int *) id_ptr; win32_thread_info *th = inferior_target_data (thread); - int i; if ((thread_id == -1 || thread_id == th->tid) - && th->suspend_count) + && th->suspended) { if (th->context.ContextFlags) { @@ -270,9 +278,13 @@ continue_one_thread (struct inferior_list_entry *this_thread, void *id_ptr) th->context.ContextFlags = 0; } - for (i = 0; i < th->suspend_count; i++) - (void) ResumeThread (th->h); - th->suspend_count = 0; + if (ResumeThread (th->h) == (DWORD) -1) + { + DWORD err = GetLastError (); + OUTMSG (("warning: ResumeThread failed in continue_one_thread, " + "(error %d): %s\n", (int) err, strwinerror (err))); + } + th->suspended = 0; } return 0; |