diff options
-rw-r--r-- | vespalib/src/vespa/vespalib/net/wakeup_pipe.cpp | 24 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/net/wakeup_pipe.h | 7 |
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(); }; |