From: Vladimir Prus <vladimir@codesourcery.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA] Implement thread death notification.
Date: Sat, 26 Apr 2008 17:45:00 -0000 [thread overview]
Message-ID: <200804262121.51407.vladimir@codesourcery.com> (raw)
We now have the 'thread-created' MI notification. This patch adds a
'thread-exited' notification to match. Are non-MI bits of this
patch OK?
- Volodya
2008-03-29 Pedro Alves <pedro@codesourcery.com>
gdb/doc/
* observer.texi (thread_exit): New.
gdb/
* linux-nat.c: Include observer.h.
(exit_lwp): Call observer_notify_thread_exit.
* Makefile.in (linux-nat.o): Update.
* mi/mi-interp.c (mi_interpreter_init): Register mi_thread_exit as
thread_exit observer.
(mi_thread_exit): New.
---
gdb/Makefile.in | 3 ++-
gdb/doc/observer.texi | 4 ++++
gdb/linux-nat.c | 6 +++++-
gdb/mi/mi-interp.c | 16 +++++++++++++++-
4 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 9304bc2..9d72168 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -2375,7 +2375,8 @@ linux-nat.o: linux-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdb_string_h) \
$(gdb_wait_h) $(gdb_assert_h) $(linux_nat_h) $(gdbthread_h) \
$(gdbcmd_h) $(regcache_h) $(regset_h) $(inf_ptrace_h) $(auxv_h) \
$(elf_bfd_h) $(gregset_h) $(gdbcore_h) $(gdbthread_h) $(gdb_stat_h) \
- $(linux_fork_h) $(inf_loop_h) $(event_loop_h) $(event_top_h)
+ $(linux_fork_h) $(inf_loop_h) $(event_loop_h) $(event_top_h) \
+ $(observer_h)
linux-thread-db.o: linux-thread-db.c $(defs_h) $(gdb_assert_h) \
$(gdb_proc_service_h) $(gdb_thread_db_h) $(bfd_h) $(exceptions_h) \
$(gdbthread_h) $(inferior_h) $(symfile_h) $(objfiles_h) $(target_h) \
diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi
index 5bcc76c..af3835b 100644
--- a/gdb/doc/observer.texi
+++ b/gdb/doc/observer.texi
@@ -133,3 +133,7 @@ previously loaded symbol table data has now been invalidated.
The thread specified by @var{t} has been created.
@end deftypefun
+@deftypefun void thread_exit (struct thread_info *@var{t})
+The thread specified by @var{t} has exited.
+@end deftypefun
+
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 9511815..a97ad0f 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -49,6 +49,7 @@
#include "inf-loop.h"
#include "event-loop.h"
#include "event-top.h"
+#include "observer.h"
#ifndef O_LARGEFILE
#define O_LARGEFILE 0
@@ -995,10 +996,13 @@ prune_lwps (void)
static void
exit_lwp (struct lwp_info *lp)
{
- if (in_thread_list (lp->ptid))
+ struct thread_info *th = find_thread_pid (lp->ptid);
+
+ if (th)
{
if (print_thread_events)
printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
+ observer_notify_thread_exit (th);
/* Core GDB cannot deal with us deleting the current thread. */
if (!ptid_equal (lp->ptid, inferior_ptid))
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index 8dfd3ee..da7a717 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -67,6 +67,7 @@ static void mi_insert_notify_hooks (void);
static void mi_remove_notify_hooks (void);
static void mi_new_thread (struct thread_info *t);
+static void mi_thread_exit (struct thread_info *t);
static void *
mi_interpreter_init (int top_level)
@@ -88,7 +89,10 @@ mi_interpreter_init (int top_level)
mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
if (top_level)
- observer_attach_new_thread (mi_new_thread);
+ {
+ observer_attach_new_thread (mi_new_thread);
+ observer_attach_thread_exit (mi_thread_exit);
+ }
return mi;
}
@@ -317,6 +321,16 @@ mi_new_thread (struct thread_info *t)
gdb_flush (mi->event_channel);
}
+static void
+mi_thread_exit (struct thread_info *t)
+{
+ struct mi_interp *mi = top_level_interpreter_data ();
+
+ target_terminal_ours ();
+ fprintf_unfiltered (mi->event_channel, "thread-exited,id=\"%d\"", t->num);
+ gdb_flush (mi->event_channel);
+}
+
extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
void
--
1.5.3.5
next reply other threads:[~2008-04-26 17:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-26 17:45 Vladimir Prus [this message]
2008-05-01 20:04 ` Daniel Jacobowitz
2008-05-01 20:13 ` Vladimir Prus
2008-05-01 20:21 ` Daniel Jacobowitz
2008-04-27 15:03 Nick Roberts
2008-04-29 20:07 ` Vladimir Prus
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=200804262121.51407.vladimir@codesourcery.com \
--to=vladimir@codesourcery.com \
--cc=gdb-patches@sources.redhat.com \
/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