[PATCH v2 5/5] [gdbsupport] Handle EINTR in event-pipe.cc

Tom de Vries tdevries@suse.de
Tue Nov 5 09:58:38 GMT 2024


Use gdb syscall wrappers to handle EINTR in event-pipe.cc.

Tested on aarch64-linux.
---
 gdbsupport/event-pipe.cc | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/gdbsupport/event-pipe.cc b/gdbsupport/event-pipe.cc
index af6c943284f..692b6e5cdca 100644
--- a/gdbsupport/event-pipe.cc
+++ b/gdbsupport/event-pipe.cc
@@ -19,6 +19,7 @@
 
 #include "gdbsupport/event-pipe.h"
 #include "gdbsupport/filestuff.h"
+#include "gdbsupport/eintr.h"
 
 #include <errno.h>
 #include <fcntl.h>
@@ -41,8 +42,8 @@ event_pipe::open_pipe ()
   if (gdb_pipe_cloexec (m_fds) == -1)
     return false;
 
-  if (fcntl (m_fds[0], F_SETFL, O_NONBLOCK) == -1
-      || fcntl (m_fds[1], F_SETFL, O_NONBLOCK) == -1)
+  if (gdb_fcntl (m_fds[0], F_SETFL, O_NONBLOCK) == -1
+      || gdb_fcntl (m_fds[1], F_SETFL, O_NONBLOCK) == -1)
     {
       close_pipe ();
       return false;
@@ -56,8 +57,8 @@ event_pipe::open_pipe ()
 void
 event_pipe::close_pipe ()
 {
-  ::close (m_fds[0]);
-  ::close (m_fds[1]);
+  gdb_close (m_fds[0]);
+  gdb_close (m_fds[1]);
   m_fds[0] = -1;
   m_fds[1] = -1;
 }
@@ -72,9 +73,9 @@ event_pipe::flush ()
 
   do
     {
-      ret = read (m_fds[0], &buf, 1);
+      ret = gdb_read (m_fds[0], &buf, 1);
     }
-  while (ret >= 0 || (ret == -1 && errno == EINTR));
+  while (ret >= 0);
 }
 
 /* See event-pipe.h.  */
@@ -82,18 +83,12 @@ event_pipe::flush ()
 void
 event_pipe::mark ()
 {
-  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.  */
   flush ();
 
-  do
-    {
-      ret = write (m_fds[1], "+", 1);
-    }
-  while (ret == -1 && errno == EINTR);
+  gdb_write (m_fds[1], "+", 1);
 
   /* Ignore EAGAIN.  If the pipe is full, the event loop will already
      be awakened anyway.  */
-- 
2.35.3



More information about the Gdb-patches mailing list