This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Python and target-async
- From: Pedro Alves <pedro at codesourcery dot com>
- To: Kevin Pouget <kevin dot pouget at gmail dot com>
- Cc: gdb at sourceware dot org
- Date: Mon, 5 Sep 2011 16:53:53 +0100
- Subject: Re: Python and target-async
- References: <BANLkTimGZ3DSbkRts1Oc8_ZyrAG3hi7PzA@mail.gmail.com> <CAPftXUK2dG3G2tHfNJuVKZhOTuXO+cv4QwCai9siQDdrMw+J_g@mail.gmail.com> <CAPftXU+cKNwhxFwf+2Pk8=ferJKRTXm==j50ukranwMMXFmu5Q@mail.gmail.com>
On Friday 19 August 2011 14:35:07, Kevin Pouget wrote:
> furthermore, the `gdb.execute("detach")' which I commented out above,
> leads to the internal_error that I reported in
> http://sourceware.org/bugzilla/show_bug.cgi?id=13110 :
>
> > ...gdb/thread.c:623: internal-error: is_thread_state: Assertion `tp' failed.
> > A problem internal to GDB has been detected,
> > further debugging may prove unreliable.
>
> Any thought on what to do for that?
>
This. Tested on x86_64-linux and applied.
But I'm now wondering if we actually ever need the registers_changed
call here or in wait_for_inferior nowadays --- we flush threads'
register caches when we resume them (target_resume).
--
Pedro Alves
2011-09-05 Pedro Alves <pedro@codesourcery.com>
PR cli/13110
gdb/
* infrun.c (fetch_inferior_event): Check if there's a selected
thread before checking if the selected thread is executing.
---
gdb/infrun.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: src/gdb/infrun.c
===================================================================
--- src.orig/gdb/infrun.c 2011-09-05 15:50:49.000000000 +0100
+++ src/gdb/infrun.c 2011-09-05 15:57:10.693964411 +0100
@@ -2749,7 +2749,9 @@ fetch_inferior_event (void *client_data)
switches threads anyway). If we didn't do this, a spurious
delayed event in all-stop mode would make the user lose the
selected frame. */
- if (non_stop || is_executing (inferior_ptid))
+ if (non_stop
+ || (!ptid_equal (inferior_ptid, null_ptid)
+ && is_executing (inferior_ptid)))
registers_changed ();
make_cleanup_restore_integer (&execution_direction);