diff options
Diffstat (limited to '3rdparty/asio/include/asio/detail/impl/pipe_select_interrupter.ipp')
-rw-r--r-- | 3rdparty/asio/include/asio/detail/impl/pipe_select_interrupter.ipp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/3rdparty/asio/include/asio/detail/impl/pipe_select_interrupter.ipp b/3rdparty/asio/include/asio/detail/impl/pipe_select_interrupter.ipp index 435da014dcb..31c1b5c9b30 100644 --- a/3rdparty/asio/include/asio/detail/impl/pipe_select_interrupter.ipp +++ b/3rdparty/asio/include/asio/detail/impl/pipe_select_interrupter.ipp @@ -2,7 +2,7 @@ // detail/impl/pipe_select_interrupter.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -101,12 +101,17 @@ bool pipe_select_interrupter::reset() { char data[1024]; signed_size_type bytes_read = ::read(read_descriptor_, data, sizeof(data)); - if (bytes_read < 0 && errno == EINTR) + if (bytes_read == sizeof(data)) continue; - bool was_interrupted = (bytes_read > 0); - while (bytes_read == sizeof(data)) - bytes_read = ::read(read_descriptor_, data, sizeof(data)); - return was_interrupted; + if (bytes_read > 0) + return true; + if (bytes_read == 0) + return false; + if (errno == EINTR) + continue; + if (errno == EWOULDBLOCK || errno == EAGAIN) + return true; + return false; } } |