From 49e9f443f655fd07cc8ed1e4ad6ce329ded0fdc3 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Fri, 17 Mar 2023 23:02:27 +0100 Subject: [PATCH] Simplify Channel::receive by handling non-blocking recv separately --- src/mc/ModelChecker.cpp | 9 ++++++--- src/mc/remote/Channel.cpp | 4 ++-- src/mc/remote/Channel.hpp | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mc/ModelChecker.cpp b/src/mc/ModelChecker.cpp index 20d6be5d8c..8de5122af5 100644 --- a/src/mc/ModelChecker.cpp +++ b/src/mc/ModelChecker.cpp @@ -43,9 +43,12 @@ void ModelChecker::start() auto mc = static_cast(arg); if (events == EV_READ) { std::array buffer; - ssize_t size = mc->checker_side_.get_channel().receive(buffer.data(), buffer.size(), false); - if (size == -1 && errno != EAGAIN) - throw simgrid::xbt::errno_error(); + ssize_t size = recv(mc->checker_side_.get_channel().get_socket(), buffer.data(), buffer.size(), MSG_DONTWAIT); + if (size == -1) { + XBT_ERROR("Channel::receive failure: %s", strerror(errno)); + if (errno != EAGAIN) + throw simgrid::xbt::errno_error(); + } if (not mc->handle_message(buffer.data(), size)) mc->checker_side_.break_loop(); diff --git a/src/mc/remote/Channel.cpp b/src/mc/remote/Channel.cpp index dfd07e5fe1..57f8942a4c 100644 --- a/src/mc/remote/Channel.cpp +++ b/src/mc/remote/Channel.cpp @@ -42,9 +42,9 @@ int Channel::send(const void* message, size_t size) const return 0; } -ssize_t Channel::receive(void* message, size_t size, bool block) const +ssize_t Channel::receive(void* message, size_t size) const { - ssize_t res = recv(this->socket_, message, size, block ? 0 : MSG_DONTWAIT); + ssize_t res = recv(this->socket_, message, size, 0); if (res != -1) { if (is_valid_MessageType(*static_cast(message))) { XBT_DEBUG("Receive %s (requested %zu; received %zd)", to_c_str(*static_cast(message)), size, res); diff --git a/src/mc/remote/Channel.hpp b/src/mc/remote/Channel.hpp index c2a4030091..da1f649ae1 100644 --- a/src/mc/remote/Channel.hpp +++ b/src/mc/remote/Channel.hpp @@ -43,7 +43,7 @@ public: } // Receive - ssize_t receive(void* message, size_t size, bool block = true) const; + ssize_t receive(void* message, size_t size) const; template typename std::enable_if_t(), ssize_t> receive(M& m) const { return this->receive(&m, sizeof(M)); -- 2.20.1