diff options
author | Tom de Vries <tdevries@suse.de> | 2024-11-22 17:44:29 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2024-11-22 17:44:29 +0100 |
commit | e031f02db3a23e96805b07fdee6fafdd2afea32f (patch) | |
tree | 9baa2a66661894a1fac0828aedb72e1f694b0715 | |
parent | 2af94d6c929ad3e5b96a9884d500d3effc28755c (diff) | |
download | gdb-e031f02db3a23e96805b07fdee6fafdd2afea32f.zip gdb-e031f02db3a23e96805b07fdee6fafdd2afea32f.tar.gz gdb-e031f02db3a23e96805b07fdee6fafdd2afea32f.tar.bz2 |
[gdbsupport] Handle EINTR in event-pipe.cc
Use gdb syscall wrappers to handle EINTR in event-pipe.cc.
Tested on aarch64-linux.
-rw-r--r-- | gdbsupport/event-pipe.cc | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/gdbsupport/event-pipe.cc b/gdbsupport/event-pipe.cc index af6c943..120edd1 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. */ |