summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vespalib/src/vespa/vespalib/net/wakeup_pipe.cpp24
-rw-r--r--vespalib/src/vespa/vespalib/net/wakeup_pipe.h7
2 files changed, 20 insertions, 11 deletions
diff --git a/vespalib/src/vespa/vespalib/net/wakeup_pipe.cpp b/vespalib/src/vespa/vespalib/net/wakeup_pipe.cpp
index 60900289e79..b8025bfcf9f 100644
--- a/vespalib/src/vespa/vespalib/net/wakeup_pipe.cpp
+++ b/vespalib/src/vespa/vespalib/net/wakeup_pipe.cpp
@@ -2,34 +2,40 @@
#include "wakeup_pipe.h"
#include "socket_utils.h"
+#include <vespa/vespalib/util/require.h>
#include <unistd.h>
namespace vespalib {
WakeupPipe::WakeupPipe()
- : _pipe()
+ : _reader(),
+ _writer()
{
- socketutils::nonblocking_pipe(_pipe);
+ int pipe[2];
+ socketutils::nonblocking_pipe(pipe);
+ _reader.reset(pipe[0]);
+ _writer.reset(pipe[1]);
}
-WakeupPipe::~WakeupPipe()
-{
- close(_pipe[0]);
- close(_pipe[1]);
-}
+WakeupPipe::~WakeupPipe() = default;
void
WakeupPipe::write_token()
{
char token = 'T';
- [[maybe_unused]] ssize_t res = write(_pipe[1], &token, 1);
+ ssize_t res = _writer.write(&token, 1);
+ if (res < 0) {
+ res = -errno;
+ }
+ REQUIRE(res > 0 || res == -EAGAIN || res == -EWOULDBLOCK);
}
void
WakeupPipe::read_tokens()
{
char token_trash[128];
- [[maybe_unused]] ssize_t res = read(_pipe[0], token_trash, sizeof(token_trash));
+ ssize_t res = _reader.read(token_trash, sizeof(token_trash));
+ REQUIRE(res > 0);
}
}
diff --git a/vespalib/src/vespa/vespalib/net/wakeup_pipe.h b/vespalib/src/vespa/vespalib/net/wakeup_pipe.h
index b52f7f9e32d..36c88b205c0 100644
--- a/vespalib/src/vespa/vespalib/net/wakeup_pipe.h
+++ b/vespalib/src/vespa/vespalib/net/wakeup_pipe.h
@@ -2,6 +2,8 @@
#pragma once
+#include "socket_handle.h"
+
namespace vespalib {
//-----------------------------------------------------------------------------
@@ -15,11 +17,12 @@ namespace vespalib {
**/
class WakeupPipe {
private:
- int _pipe[2];
+ SocketHandle _reader;
+ SocketHandle _writer;
public:
WakeupPipe();
~WakeupPipe();
- int get_read_fd() const { return _pipe[0]; }
+ int get_read_fd() const { return _reader.get(); }
void write_token();
void read_tokens();
};