summaryrefslogtreecommitdiff
path: root/gdb/inf-ptrace.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2022-02-22 11:22:14 -0800
committerJohn Baldwin <jhb@FreeBSD.org>2022-02-22 11:22:14 -0800
commitb146ba14d7019e046f5691ffbffa1d852b798c72 (patch)
tree864815823848712c9bd97a6503e5f34772e6b446 /gdb/inf-ptrace.c
parente05523bd2411bac0277da73556f4d01f6c7448aa (diff)
downloadbinutils-gdb-b146ba14d7019e046f5691ffbffa1d852b798c72.tar.gz
inf-ptrace: Add an event_pipe to be used for async mode in subclasses.
Subclasses of inf_ptrace_target have to opt-in to using the event_pipe by implementing the can_async_p and async methods. For subclasses which do this, inf_ptrace_target provides is_async_p, async_wait_fd and closes the pipe in the close target method. inf_ptrace_target also provides wrapper routines around the event pipe (async_file_open, async_file_close, async_file_flush, and async_file_mark) for use in target methods such as async. inf_ptrace_target also exports a static async_file_mark_if_open function which can be used in SIGCHLD signal handlers.
Diffstat (limited to 'gdb/inf-ptrace.c')
-rw-r--r--gdb/inf-ptrace.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index ebcc409b989..ea1fe4541f0 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -48,6 +48,9 @@ gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr,
#endif
}
+/* The event pipe registered as a waitable file in the event loop. */
+event_pipe inf_ptrace_target::m_event_pipe;
+
inf_ptrace_target::~inf_ptrace_target ()
{}
@@ -527,3 +530,15 @@ inf_ptrace_target::pid_to_str (ptid_t ptid)
{
return normal_pid_to_str (ptid);
}
+
+/* Implement the "close" target method. */
+
+void
+inf_ptrace_target::close ()
+{
+ /* Unregister from the event loop. */
+ if (is_async_p ())
+ async (0);
+
+ inf_child_target::close ();
+}