remote packet sent after Ravenscar inferior exited

When debugging a program using the Ravenscar profile, the debugger
sometimes tries to send the following packet to the remote after
the inferior exited.

     (gdb) c
     Continuing.
     [...]
     Sending packet: $vCont;c:1#13...Ack
     Packet received: W00
     Sending packet: $Hg1#e0...putpkt: write failed: Broken pipe.

As the inferior exited, the remote has already disconnected, and thus
the operation fails.

The reason why GDB sends the package is because the ravenscar-thread
module tries to updates the list of threads.  But this doesn't make
sense, since the program has exited.  This patch fixes it.

gdb/ChangeLog:

        * ravenscar-thread.c (ravenscar_wait): Only update the list
        of threads and inferior_ptid if the inferior is still alive.
This commit is contained in:
Joel Brobecker 2012-10-24 18:19:50 +00:00
parent f69c91ad24
commit bed0c24398
2 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2012-10-24 Joel Brobecker <brobecker@adacore.com>
* ravenscar-thread.c (ravenscar_wait): Only update the list
of threads and inferior_ptid if the inferior is still alive.
2012-10-24 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (is_known_support_routine): Use lbasename when

View File

@ -204,8 +204,19 @@ ravenscar_wait (struct target_ops *ops, ptid_t ptid,
inferior_ptid = base_ptid;
beneath->to_wait (beneath, base_ptid, status, 0);
ravenscar_find_new_threads (ops);
ravenscar_update_inferior_ptid ();
/* Find any new threads that might have been created, and update
inferior_ptid to the active thread.
Only do it if the program is still alive, though. Otherwise,
this causes problems when debugging through the remote protocol,
because we might try switching threads (and thus sending packets)
after the remote has disconnected. */
if (status->kind != TARGET_WAITKIND_EXITED
&& status->kind != TARGET_WAITKIND_SIGNALLED)
{
ravenscar_find_new_threads (ops);
ravenscar_update_inferior_ptid ();
}
return inferior_ptid;
}