From: Yao Qi <yao@codesourcery.com>
To: <gdb-patches@sourceware.org>
Subject: [PATCH] Attach discard_pending_stop_replies to observer inferior_exit
Date: Fri, 07 Dec 2012 02:51:00 -0000 [thread overview]
Message-ID: <1354848657-10348-1-git-send-email-yao@codesourcery.com> (raw)
Hi,
discard_pending_stop_replies is called in three places, remote_detach_1,
extended_remote_mourn_1 (/w param pid) and remote_close (/w param -1).
They will finally call observer_notify_inferior_exit in some way,
remote_detach_1 >remote_mourn_1 >generic_mourn_inferior >exit_inferior >observer_notify_inferior_exit
extended_remote_mourn_1 >generic_mourn_inferior >exit_inferior >observer_notify_inferior_exit
remote_close >discard_all_inferiors >exit_inferior_silent >observer_notify_inferior_exit
so this inspires me that we can attach discard_pending_stop_replies
to inferior_exit observer, and don't have to worry about the case that
PID is -1. This is what this patch does. Regression tested on
x86_64-linux with native and gdbserver. Is it OK?
gdb:
2012-12-07 Yao Qi <yao@codesourcery.com>
* remote.c (discard_pending_stop_replies): Remove declaration.
(remote_close): Remove call discard_pending_stop_replies.
(remote_detach_1, extended_remote_mourn_1): Likewise.
(discard_pending_stop_replies): Change parameter from PID to
INF.
(_initialize_remote): Attach discard_pending_stop_replies to
inferior_exit observer.
---
gdb/remote.c | 22 +++++++---------------
1 files changed, 7 insertions(+), 15 deletions(-)
diff --git a/gdb/remote.c b/gdb/remote.c
index 069f294..6d2f431 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -229,7 +229,6 @@ static void do_stop_reply_xfree (void *arg);
static void remote_parse_stop_reply (char *buf, struct stop_reply *);
static void push_stop_reply (struct stop_reply *);
static void remote_get_pending_stop_replies (void);
-static void discard_pending_stop_replies (int pid);
static int peek_stop_reply (ptid_t ptid);
static void remote_async_inferior_event_handler (gdb_client_data);
@@ -3022,9 +3021,6 @@ remote_close (int quitting)
inferior_ptid = null_ptid;
discard_all_inferiors ();
- /* We're no longer interested in any of these events. */
- discard_pending_stop_replies (-1);
-
if (remote_async_inferior_event_token)
delete_async_event_handler (&remote_async_inferior_event_token);
if (remote_async_get_pending_events_token)
@@ -4351,7 +4347,6 @@ remote_detach_1 (char *args, int from_tty, int extended)
if (from_tty && !extended)
puts_filtered (_("Ending remote debugging.\n"));
- discard_pending_stop_replies (pid);
target_mourn_inferior ();
}
@@ -5159,18 +5154,16 @@ stop_reply_xfree (struct stop_reply *r)
}
}
-/* Discard all pending stop replies of inferior PID. If PID is -1,
- discard everything. */
+/* Discard all pending stop replies of inferior INF. */
static void
-discard_pending_stop_replies (int pid)
+discard_pending_stop_replies (struct inferior *inf)
{
struct stop_reply *prev = NULL, *reply, *next;
/* Discard the in-flight notification. */
if (pending_stop_reply != NULL
- && (pid == -1
- || ptid_get_pid (pending_stop_reply->ptid) == pid))
+ && ptid_get_pid (pending_stop_reply->ptid) == inf->pid)
{
stop_reply_xfree (pending_stop_reply);
pending_stop_reply = NULL;
@@ -5181,8 +5174,7 @@ discard_pending_stop_replies (int pid)
for (reply = stop_reply_queue; reply; reply = next)
{
next = reply->next;
- if (pid == -1
- || ptid_get_pid (reply->ptid) == pid)
+ if (ptid_get_pid (reply->ptid) == inf->pid)
{
if (reply == stop_reply_queue)
stop_reply_queue = reply->next;
@@ -7656,9 +7648,6 @@ extended_remote_mourn_1 (struct target_ops *target)
connected. */
rs->waiting_for_stop_reply = 0;
- /* We're no longer interested in these events. */
- discard_pending_stop_replies (ptid_get_pid (inferior_ptid));
-
/* If the current general thread belonged to the process we just
detached from or has exited, the remote side current general
thread becomes undefined. Considering a case like this:
@@ -11335,6 +11324,9 @@ _initialize_remote (void)
/* Hook into new objfile notification. */
observer_attach_new_objfile (remote_new_objfile);
+ /* We're no longer interested in notification events of an inferior
+ when it exits. */
+ observer_attach_inferior_exit (discard_pending_stop_replies);
/* Set up signal handlers. */
sigint_remote_token =
--
1.7.7.6
next reply other threads:[~2012-12-07 2:51 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-07 2:51 Yao Qi [this message]
2012-12-14 1:57 ` [ping]: " Yao Qi
2012-12-14 9:53 ` Pedro Alves
2012-12-14 13:30 ` Yao Qi
2012-12-14 13:48 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1354848657-10348-1-git-send-email-yao@codesourcery.com \
--to=yao@codesourcery.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox