Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix missing doc for Tasks
[simgrid.git] / src / s4u / s4u_Engine.cpp
index de66d41..094e831 100644 (file)
@@ -22,7 +22,7 @@
 #include <algorithm>
 #include <string>
 
-XBT_LOG_NEW_CATEGORY(s4u, "Log channels of the S4U (Simgrid for you) interface");
+XBT_LOG_NEW_CATEGORY(s4u, "Log channels of the S4U (SimGrid for you) interface");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_engine, s4u, "Logging specific to S4U (engine)");
 
 static simgrid::kernel::actor::ActorCode maestro_code;
@@ -76,7 +76,7 @@ Engine* Engine::get_instance()
 Engine* Engine::get_instance(int* argc, char** argv)
 {
   if (Engine::instance_ == nullptr) {
-    auto e = new Engine(argc, argv);
+    const auto* e = new Engine(argc, argv);
     xbt_assert(Engine::instance_ == e);
   }
   return Engine::instance_;
@@ -86,11 +86,6 @@ const std::vector<std::string>& Engine::get_cmdline() const
   return pimpl_->get_cmdline();
 }
 
-void Engine::shutdown() // XBT_ATTRIB_DEPRECATED_v335
-{
-  delete Engine::instance_;
-}
-
 double Engine::get_clock()
 {
   if (MC_is_active() || MC_record_replay_is_active()) {
@@ -248,13 +243,13 @@ std::string Engine::flatify_platform() const
   ss << "<?xml version='1.0'?>\n";
   ss << "<!DOCTYPE platform SYSTEM \"https://simgrid.org/simgrid.dtd\">\n";
   ss << "<platform version=\"" << version << "\">\n";
-  ss << "<AS id=\"" << get_netzone_root()->get_name() << "\" routing=\"Full\">\n";
+  ss << "<zone id=\"" << get_netzone_root()->get_name() << "\" routing=\"Full\">\n";
 
   flatify_hosts(*this, ss);
   flatify_links(*this, ss);
   flatify_routes(*this, ss);
 
-  ss << "</AS>\n";
+  ss << "</zone>\n";
   ss << "</platform>\n";
   return ss.str();
 }
@@ -405,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
 {
@@ -525,7 +534,7 @@ kernel::routing::NetPoint* Engine::netpoint_by_name_or_null(const std::string& n
 
 kernel::routing::NetPoint* Engine::netpoint_by_name(const std::string& name) const
 {
-  auto netp = netpoint_by_name_or_null(name);
+  auto* netp = netpoint_by_name_or_null(name);
   if (netp == nullptr) {
     throw std::invalid_argument("Netpoint not found: " + name);
   }
@@ -592,7 +601,7 @@ Engine* Engine::set_default_comm_data_copy_callback(
 /* **************************** Public C interface *************************** */
 void simgrid_init(int* argc, char** argv)
 {
-  simgrid::s4u::Engine::get_instance(argc, argv);
+  static simgrid::s4u::Engine e(argc, argv);
 }
 void simgrid_load_platform(const char* file)
 {