Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Simplify Channel::receive by handling non-blocking recv separately
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 17 Mar 2023 22:02:27 +0000 (23:02 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 17 Mar 2023 22:02:27 +0000 (23:02 +0100)
src/mc/ModelChecker.cpp
src/mc/remote/Channel.cpp
src/mc/remote/Channel.hpp

index 20d6be5..8de5122 100644 (file)
@@ -43,9 +43,12 @@ void ModelChecker::start()
         auto mc = static_cast<simgrid::mc::ModelChecker*>(arg);
         if (events == EV_READ) {
           std::array<char, MC_MESSAGE_LENGTH> 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();
index dfd07e5..57f8942 100644 (file)
@@ -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<int*>(message))) {
       XBT_DEBUG("Receive %s (requested %zu; received %zd)", to_c_str(*static_cast<MessageType*>(message)), size, res);
index c2a4030..da1f649 100644 (file)
@@ -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 <class M> typename std::enable_if_t<messageType<M>(), ssize_t> receive(M& m) const
   {
     return this->receive(&m, sizeof(M));