[RFC PATCH 3/7] gdbserver linux-low: Convert linux_event_pipe to the event-pipe class.
John Baldwin
jhb@FreeBSD.org
Mon Jun 7 17:09:28 GMT 2021
gdbserver/ChangeLog:
* linux-low.cc: Include gdbsupport/event-pipe.h.
(linux_event_pipe): Convert to an instance of event_pipe.
(target_is_async_p, async_file_flush, async_file_mark): Implement
as methods of event_pipe.
(linux_process_target::async): Update to use event_pipe methods.
---
gdbserver/ChangeLog | 8 ++++++++
gdbserver/linux-low.cc | 39 +++++++++------------------------------
2 files changed, 17 insertions(+), 30 deletions(-)
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index f8d7fd65fb..843402b26f 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,3 +1,11 @@
+2021-06-04 John Baldwin <jhb@FreeBSD.org>
+
+ * linux-low.cc: Include gdbsupport/event-pipe.h.
+ (linux_event_pipe): Convert to an instance of event_pipe.
+ (target_is_async_p, async_file_flush, async_file_mark): Implement
+ as methods of event_pipe.
+ (linux_process_target::async): Update to use event_pipe methods.
+
2021-05-27 Simon Marchi <simon.marchi@polymtl.ca>
* Fix some indentation mistakes throughout.
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index 5c6191d941..aeb7b9287f 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -21,6 +21,7 @@
#include "nat/linux-osdata.h"
#include "gdbsupport/agent.h"
#include "tdesc.h"
+#include "gdbsupport/event-loop.h"
#include "gdbsupport/rsp-low.h"
#include "gdbsupport/signals-state-save-restore.h"
#include "nat/linux-nat.h"
@@ -310,10 +311,10 @@ lwp_in_step_range (struct lwp_info *lwp)
/* The read/write ends of the pipe registered as waitable file in the
event loop. */
-static int linux_event_pipe[2] = { -1, -1 };
+static event_pipe linux_event_pipe;
/* True if we're currently in async mode. */
-#define target_is_async_p() (linux_event_pipe[0] != -1)
+#define target_is_async_p() (linux_event_pipe.active ())
static void send_sigstop (struct lwp_info *lwp);
@@ -3675,28 +3676,14 @@ linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus,
static void
async_file_flush (void)
{
- int ret;
- char buf;
-
- do
- ret = read (linux_event_pipe[0], &buf, 1);
- while (ret >= 0 || (ret == -1 && errno == EINTR));
+ linux_event_pipe.flush ();
}
/* Put something in the pipe, so the event loop wakes up. */
static void
async_file_mark (void)
{
- int ret;
-
- async_file_flush ();
-
- do
- ret = write (linux_event_pipe[1], "+", 1);
- while (ret == 0 || (ret == -1 && errno == EINTR));
-
- /* Ignore EAGAIN. If the pipe is full, the event loop will already
- be awakened anyway. */
+ linux_event_pipe.mark ();
}
ptid_t
@@ -6096,21 +6083,16 @@ linux_process_target::async (bool enable)
if (enable)
{
- if (pipe (linux_event_pipe) == -1)
+ if (!linux_event_pipe.open ())
{
- linux_event_pipe[0] = -1;
- linux_event_pipe[1] = -1;
gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
warning ("creating event pipe failed.");
return previous;
}
- fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
- fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
-
/* Register the event loop handler. */
- add_file_handler (linux_event_pipe[0],
+ add_file_handler (linux_event_pipe.event_fd (),
handle_target_event, NULL,
"linux-low");
@@ -6119,12 +6101,9 @@ linux_process_target::async (bool enable)
}
else
{
- delete_file_handler (linux_event_pipe[0]);
+ delete_file_handler (linux_event_pipe.event_fd ());
- close (linux_event_pipe[0]);
- close (linux_event_pipe[1]);
- linux_event_pipe[0] = -1;
- linux_event_pipe[1] = -1;
+ linux_event_pipe.close ();
}
gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
--
2.31.1
More information about the Gdb-patches
mailing list