From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.baldwin.cx (bigwig.baldwin.cx [IPv6:2607:f138:0:13::2]) by sourceware.org (Postfix) with ESMTPS id DC1C33889820 for ; Mon, 7 Jun 2021 17:10:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DC1C33889820 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=FreeBSD.org Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=FreeBSD.org Received: from gimli.baldwin.cx (ralph.baldwin.cx [66.234.199.215]) by mail.baldwin.cx (Postfix) with ESMTPSA id 24AE41A84C72 for ; Mon, 7 Jun 2021 13:10:38 -0400 (EDT) From: John Baldwin To: gdb-patches@sourceware.org Subject: [RFC PATCH 2/7] gdb linux-nat: Convert linux_nat_event_pipe to the event_pipe class. Date: Mon, 7 Jun 2021 10:09:27 -0700 Message-Id: <20210607170932.3954-3-jhb@FreeBSD.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210607170932.3954-1-jhb@FreeBSD.org> References: <20210607170932.3954-1-jhb@FreeBSD.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.6.4 (mail.baldwin.cx [0.0.0.0]); Mon, 07 Jun 2021 13:10:38 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.103.1 at mail.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_STATUS, KHOP_HELO_FCRDNS, SPF_HELO_PASS, SPF_SOFTFAIL, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Jun 2021 17:10:42 -0000 gdb/ChangeLog: * linux-nat.c: Include gdbsupport/event-pipe.h. (linux_nat_event_pipe): Convert to an instance of event_pipe. (linux_is_async_p, async_file_flush, async_file_mark): Implement as methods of event_pipe. (sigchld_handler, linux_async_pipe) (linux_nat_target::async_wait_fd, linux_nat_target::async): Update to use event_pipe methods. --- gdb/ChangeLog | 10 ++++++++++ gdb/linux-nat.c | 48 +++++++++++------------------------------------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e646fd53e6..cb301e1e81 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2021-06-04 John Baldwin + + * linux-nat.c: Include gdbsupport/event-pipe.h. + (linux_nat_event_pipe): Convert to an instance of event_pipe. + (linux_is_async_p, async_file_flush, async_file_mark): Implement + as methods of event_pipe. + (sigchld_handler, linux_async_pipe) + (linux_nat_target::async_wait_fd, linux_nat_target::async): Update + to use event_pipe methods. + 2021-06-03 John Baldwin * fbsd-tdep.c (FBSD_SI_USER, FBSD_SI_QUEUE, FBSD_SI_TIMER) diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 34a2aee41d..150fdd43f8 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -48,6 +48,7 @@ #include /* for O_RDONLY */ #include "inf-loop.h" #include "gdbsupport/event-loop.h" +#include "gdbsupport/event-pipe.h" #include "event-top.h" #include #include @@ -219,24 +220,17 @@ static int report_thread_events; /* The read/write ends of the pipe registered as waitable file in the event loop. */ -static int linux_nat_event_pipe[2] = { -1, -1 }; +static event_pipe linux_nat_event_pipe; /* True if we're currently in async mode. */ -#define linux_is_async_p() (linux_nat_event_pipe[0] != -1) +#define linux_is_async_p() (linux_nat_event_pipe.active ()) /* Flush the event pipe. */ static void async_file_flush (void) { - int ret; - char buf; - - do - { - ret = read (linux_nat_event_pipe[0], &buf, 1); - } - while (ret >= 0 || (ret == -1 && errno == EINTR)); + linux_nat_event_pipe.flush (); } /* Put something (anything, doesn't matter what, or how much) in event @@ -246,21 +240,7 @@ async_file_flush (void) static void async_file_mark (void) { - int ret; - - /* It doesn't really matter what the pipe contains, as long we end - up with something in it. Might as well flush the previous - left-overs. */ - async_file_flush (); - - do - { - ret = write (linux_nat_event_pipe[1], "+", 1); - } - while (ret == -1 && errno == EINTR); - - /* Ignore EAGAIN. If the pipe is full, the event loop will already - be awakened anyway. */ + linux_nat_event_pipe.mark (); } static int kill_lwp (int lwpid, int signo); @@ -4041,7 +4021,7 @@ sigchld_handler (int signo) gdb_stdlog->write_async_safe ("sigchld\n", sizeof ("sigchld\n") - 1); if (signo == SIGCHLD - && linux_nat_event_pipe[0] != -1) + && linux_nat_event_pipe.active ()) async_file_mark (); /* Let the event loop know that there are events to handle. */ @@ -4073,19 +4053,13 @@ linux_async_pipe (int enable) if (enable) { - if (gdb_pipe_cloexec (linux_nat_event_pipe) == -1) + if (!linux_nat_event_pipe.open ()) internal_error (__FILE__, __LINE__, "creating event pipe failed."); - - fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK); - fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK); } else { - close (linux_nat_event_pipe[0]); - close (linux_nat_event_pipe[1]); - linux_nat_event_pipe[0] = -1; - linux_nat_event_pipe[1] = -1; + linux_nat_event_pipe.close (); } restore_child_signals_mask (&prev_mask); @@ -4097,7 +4071,7 @@ linux_async_pipe (int enable) int linux_nat_target::async_wait_fd () { - return linux_nat_event_pipe[0]; + return linux_nat_event_pipe.event_fd (); } /* target_async implementation. */ @@ -4109,7 +4083,7 @@ linux_nat_target::async (int enable) { if (!linux_async_pipe (1)) { - add_file_handler (linux_nat_event_pipe[0], + add_file_handler (linux_nat_event_pipe.event_fd (), handle_target_event, NULL, "linux-nat"); /* There may be pending events to handle. Tell the event loop @@ -4119,7 +4093,7 @@ linux_nat_target::async (int enable) } else { - delete_file_handler (linux_nat_event_pipe[0]); + delete_file_handler (linux_nat_event_pipe.event_fd ()); linux_async_pipe (0); } return; -- 2.31.1