};
/* Types of tasks exchanged between nodes. */
-typedef enum {
+enum e_message_type_t {
FIND_SUCCESSOR,
FIND_SUCCESSOR_ANSWER,
GET_PREDECESSOR,
PREDECESSOR_LEAVING,
PREDECESSOR_ALIVE,
PREDECESSOR_ALIVE_ANSWER
-} e_message_type_t;
+};
class ChordMessage {
public:
}
~ChordMessage() = default;
+
+ static void destroy(void* message);
};
class Node {
public:
explicit Node(std::vector<std::string> args);
+ Node(const Node&) = delete;
~Node();
void join(int known_id);
void leave();
}
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();