Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix S4U chord example \o/
[simgrid.git] / examples / s4u / dht-chord / s4u_dht-chord.hpp
index 60f3d6b..a415bf9 100644 (file)
@@ -126,10 +126,10 @@ public:
     double next_fix_fingers_date       = start_time_ + PERIODIC_FIX_FINGERS_DELAY;
     double next_check_predecessor_date = start_time_ + PERIODIC_CHECK_PREDECESSOR_DELAY;
     double next_lookup_date            = start_time_ + PERIODIC_LOOKUP_DELAY;
-
+    simgrid::s4u::CommPtr comm_receive = nullptr;
     while ((now < (start_time_ + deadline_)) && now < MAX_SIMULATION_TIME) {
-      data                               = nullptr;
-      simgrid::s4u::CommPtr comm_receive = simgrid::s4u::this_actor::irecv(mailbox_, &data);
+      if (comm_receive == nullptr)
+        comm_receive = simgrid::s4u::this_actor::irecv(mailbox_, &data);
       while ((now < (start_time_ + deadline_)) && now < MAX_SIMULATION_TIME && not comm_receive->test()) {
         // no task was received: make some periodic calls
         if (now >= next_stabilize_date) {
@@ -154,8 +154,8 @@ public:
       if (data != nullptr) {
         ChordMessage* message = static_cast<ChordMessage*>(data);
         handleMessage(message);
-      } else {
-        comm_receive->cancel();
+        comm_receive = nullptr;
+        data         = nullptr;
       }
       now = simgrid::s4u::Engine::getClock();
     }