Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'actor-yield' of github.com:Takishipp/simgrid into actor-yield
[simgrid.git] / examples / s4u / dht-chord / s4u-dht-chord.hpp
index 04f0c22..ff05252 100644 (file)
@@ -42,7 +42,7 @@ public:
 };
 
 /* Types of tasks exchanged between nodes. */
-typedef enum {
+enum e_message_type_t {
   FIND_SUCCESSOR,
   FIND_SUCCESSOR_ANSWER,
   GET_PREDECESSOR,
@@ -52,7 +52,7 @@ typedef enum {
   PREDECESSOR_LEAVING,
   PREDECESSOR_ALIVE,
   PREDECESSOR_ALIVE_ANSWER
-} e_message_type_t;
+};
 
 class ChordMessage {
 public:
@@ -69,6 +69,8 @@ public:
   }
 
   ~ChordMessage() = default;
+
+  static void destroy(void* message);
 };
 
 class Node {
@@ -85,6 +87,7 @@ class Node {
 
 public:
   explicit Node(std::vector<std::string> args);
+  Node(const Node&) = delete;
   ~Node();
   void join(int known_id);
   void leave();
@@ -159,8 +162,11 @@ public:
       }
       now = simgrid::s4u::Engine::getClock();
     }
-    if (data != nullptr) {
-      delete static_cast<ChordMessage*>(data);
+    if (comm_receive != nullptr) {
+      if (comm_receive->test())
+        delete static_cast<ChordMessage*>(data);
+      else
+        comm_receive->cancel();
     }
     // leave the ring
     leave();