X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/14fcd43761ba2212ae5e48832a71ecf6c8f2b9f3..596e36117322c22fd31372e7803bc197bcd4a016:/src/s4u/s4u_Mailbox.cpp diff --git a/src/s4u/s4u_Mailbox.cpp b/src/s4u/s4u_Mailbox.cpp index eda04e7c2a..76613fbfa8 100644 --- a/src/s4u/s4u_Mailbox.cpp +++ b/src/s4u/s4u_Mailbox.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -12,10 +12,9 @@ XBT_LOG_EXTERNAL_CATEGORY(s4u); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_channel, s4u, "S4U Communication Mailboxes"); -namespace simgrid { -namespace s4u { +namespace simgrid::s4u { -const xbt::string& Mailbox::get_name() const +const std::string& Mailbox::get_name() const { return pimpl_->get_name(); } @@ -73,7 +72,7 @@ kernel::activity::CommImplPtr Mailbox::front() const void Mailbox::set_receiver(ActorPtr actor) { - kernel::actor::simcall([this, actor]() { this->pimpl_->set_receiver(actor); }); + kernel::actor::simcall_answered([this, actor]() { this->pimpl_->set_receiver(actor); }); } /** @brief get the receiver (process associated to the mailbox) */ @@ -88,7 +87,7 @@ CommPtr Mailbox::put_init() { CommPtr res(new Comm()); res->sender_ = kernel::actor::ActorImpl::self(); - res->mailbox_ = this; + res->set_mailbox(this); return res; } @@ -102,7 +101,7 @@ CommPtr Mailbox::put_async(void* payload, uint64_t simulated_size_in_bytes) xbt_assert(payload != nullptr, "You cannot send nullptr"); CommPtr res = put_init(payload, simulated_size_in_bytes); - res->vetoable_start(); + res->start(); return res; } @@ -110,7 +109,7 @@ void Mailbox::put(void* payload, uint64_t simulated_size_in_bytes) { xbt_assert(payload != nullptr, "You cannot send nullptr"); - put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload)->vetoable_start()->wait(); + put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload)->start()->wait(); } /** Blocking send with timeout */ @@ -118,24 +117,36 @@ void Mailbox::put(void* payload, uint64_t simulated_size_in_bytes, double timeou { xbt_assert(payload != nullptr, "You cannot send nullptr"); - put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload)->vetoable_start()->wait_for(timeout); + put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload)->start()->wait_for(timeout); } CommPtr Mailbox::get_init() { - CommPtr res(new Comm()); + auto res = CommPtr(new Comm())->set_mailbox(this); res->receiver_ = kernel::actor::ActorImpl::self(); - res->mailbox_ = this; + return res; +} + +CommPtr Mailbox::get_async() +{ + CommPtr res = get_init()->set_dst_data(nullptr, sizeof(void*)); + res->start(); return res; } kernel::activity::ActivityImplPtr -Mailbox::iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data) +Mailbox::iprobe(int type, const std::function& match_fun, void* data) { - return kernel::actor::simcall([this, type, match_fun, data] { return pimpl_->iprobe(type, match_fun, data); }); + return kernel::actor::simcall_answered( + [this, type, &match_fun, data] { return pimpl_->iprobe(type, match_fun, data); }); } -} // namespace s4u -} // namespace simgrid + +void Mailbox::clear() +{ + kernel::actor::simcall_answered([this]() { this->pimpl_->clear(true); }); +} + +} // namespace simgrid::s4u /* **************************** Public C interface *************************** */ sg_mailbox_t sg_mailbox_by_name(const char* alias)