]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdbsupport] Handle EINTR in event-pipe.cc
authorTom de Vries <tdevries@suse.de>
Fri, 22 Nov 2024 16:44:29 +0000 (17:44 +0100)
committerTom de Vries <tdevries@suse.de>
Fri, 22 Nov 2024 16:44:29 +0000 (17:44 +0100)
Use gdb syscall wrappers to handle EINTR in event-pipe.cc.

Tested on aarch64-linux.

gdbsupport/event-pipe.cc

index af6c943284fc3d11ec8b5453cea9883fdaef2cce..120edd1daa9df499dbefd86fb3463bdb1e733e99 100644 (file)
@@ -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.  */