aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-11-22 17:44:29 +0100
committerTom de Vries <tdevries@suse.de>2024-11-22 17:44:29 +0100
commite031f02db3a23e96805b07fdee6fafdd2afea32f (patch)
tree9baa2a66661894a1fac0828aedb72e1f694b0715
parent2af94d6c929ad3e5b96a9884d500d3effc28755c (diff)
downloadgdb-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.cc21
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. */