X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7ddc46fcc39e6327b6dc919a3bcf25524f735d74..365a83d3a1407923acccab758f9225e11408b5c6:/src/s4u/s4u_Engine.cpp diff --git a/src/s4u/s4u_Engine.cpp b/src/s4u/s4u_Engine.cpp index 4bb9afddc2..094e8311d1 100644 --- a/src/s4u/s4u_Engine.cpp +++ b/src/s4u/s4u_Engine.cpp @@ -243,13 +243,13 @@ std::string Engine::flatify_platform() const ss << "\n"; ss << "\n"; ss << "\n"; - ss << "get_name() << "\" routing=\"Full\">\n"; + ss << "get_name() << "\" routing=\"Full\">\n"; flatify_hosts(*this, ss); flatify_links(*this, ss); flatify_routes(*this, ss); - ss << "\n"; + ss << "\n"; ss << "\n"; return ss.str(); } @@ -400,6 +400,20 @@ Mailbox* Engine::mailbox_by_name_or_create(const std::string& name) const return mbox->get_iface(); } +MessageQueue* Engine::message_queue_by_name_or_create(const std::string& name) const +{ + /* two actors may have pushed the same mbox_create simcall at the same time */ + kernel::activity::MessageQueueImpl* queue = kernel::actor::simcall_answered([&name, this] { + auto [m, inserted] = pimpl_->mqueues_.try_emplace(name, nullptr); + if (inserted) { + m->second = new kernel::activity::MessageQueueImpl(name); + XBT_DEBUG("Creating a message queue at %p with name %s", m->second, name.c_str()); + } + return m->second; + }); + return queue->get_iface(); +} + /** @brief Returns the amount of links in the platform */ size_t Engine::get_link_count() const {