X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f21d89e2df9b398e4e6f422d253b2eed951f45d6..f1671393f75bd162d50e64573db72c0e80cd137f:/examples/s4u/dht-chord/s4u-dht-chord-node.cpp diff --git a/examples/s4u/dht-chord/s4u-dht-chord-node.cpp b/examples/s4u/dht-chord/s4u-dht-chord-node.cpp index 93af0361da..fbfdec60f3 100644 --- a/examples/s4u/dht-chord/s4u-dht-chord-node.cpp +++ b/examples/s4u/dht-chord/s4u-dht-chord-node.cpp @@ -52,6 +52,8 @@ Node::Node(std::vector args) // initialize my node id_ = std::stoi(args[1]); + XBT_DEBUG("Initialize node with id: %d", id_); + random.set_seed(id_); mailbox_ = simgrid::s4u::Mailbox::by_name(std::to_string(id_)); next_finger_to_fix = 0; fingers_.resize(nb_bits, id_); @@ -134,7 +136,7 @@ void Node::notifyAndQuit() void Node::randomLookup() { int res = id_; - int random_index = simgrid::xbt::random::uniform_int(0, nb_bits - 1); + int random_index = random.uniform_int(0, nb_bits - 1); int random_id = fingers_[random_index]; XBT_DEBUG("Making a lookup request for id %d", random_id); if (random_id != id_) @@ -362,7 +364,7 @@ void Node::notify(int predecessor_candidate_id) } /* Notifies a remote node that its predecessor may have changed. */ -void Node::remoteNotify(int notify_id, int predecessor_candidate_id) +void Node::remoteNotify(int notify_id, int predecessor_candidate_id) const { ChordMessage* message = new ChordMessage(NOTIFY); message->request_id = predecessor_candidate_id; @@ -498,7 +500,15 @@ void Node::operator()() while (now < std::min(start_time_ + deadline_, MAX_SIMULATION_TIME)) { if (comm_receive == nullptr) comm_receive = mailbox_->get_async(&data); - if (comm_receive->test()) { + bool comm_completed = true; + try { + if (not comm_receive->test()) + comm_completed = false; + } catch (const simgrid::TimeoutException&) { + XBT_DEBUG("Caught a timeout, go ahead."); + } + + if (comm_completed) { if (data != nullptr) { ChordMessage* message = static_cast(data); handleMessage(message); @@ -528,10 +538,14 @@ void Node::operator()() now = simgrid::s4u::Engine::get_clock(); } if (comm_receive != nullptr) { - if (comm_receive->test()) - delete static_cast(data); - else - comm_receive->cancel(); + try { + if (comm_receive->test()) + delete static_cast(data); + else + comm_receive->cancel(); + } catch (const simgrid::TimeoutException&) { + XBT_DEBUG("Caught a timeout for last message, nevermind."); + } } // leave the ring leave();