This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit] remote packet sent after Ravenscar inferior exited
- From: Joel Brobecker <brobecker at adacore dot com>
- To: gdb-patches at sourceware dot org
- Cc: Joel Brobecker <brobecker at adacore dot com>
- Date: Wed, 24 Oct 2012 14:20:58 -0400
- Subject: [commit] remote packet sent after Ravenscar inferior exited
Hello,
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.
Checked in.
---
gdb/ChangeLog | 5 +++++
gdb/ravenscar-thread.c | 15 +++++++++++++--
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a4dd74e..be3bb1c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
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
matching the symtab's filename against
known_runtime_file_name_patterns.
diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c
index 3854381..0c475cb 100644
--- a/gdb/ravenscar-thread.c
+++ b/gdb/ravenscar-thread.c
@@ -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;
}
--
1.7.9.5