Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
save some hidden calls to Engine::get_instance
[simgrid.git] / teshsuite / s4u / listen_async / listen_async.cpp
index 3b3b923..fd6effa 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017. The SimGrid Team. All rights reserved.               */
+/* Copyright (c) 2017-2021. 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. */
@@ -6,7 +6,7 @@
 /* Bug report: https://github.com/simgrid/simgrid/issues/40
  *
  * Task.listen used to be on async mailboxes as it always returned false.
- * This occures in Java and C, but is only tested here in C.
+ * This occurs in Java and C, but is only tested here in C.
  */
 
 #include "simgrid/s4u.hpp"
@@ -15,42 +15,43 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example")
 
 static void server()
 {
-  simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("mailbox");
+  simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name("mailbox");
 
-  simgrid::s4u::CommPtr sendComm = simgrid::s4u::this_actor::isend(mailbox, xbt_strdup("Some data"), 0);
+  simgrid::s4u::CommPtr sendComm = mailbox->put_async(new std::string("Some data"), 0);
 
   xbt_assert(mailbox->listen()); // True (1)
   XBT_INFO("Task listen works on regular mailboxes");
-  char* res = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox));
+  XBT_INFO("Mailbox::listen_from() returns %ld (should return my pid, which is %ld)", mailbox->listen_from(),
+           simgrid::s4u::this_actor::get_pid());
 
-  xbt_assert(not strcmp("Some data", res), "Data received: %s", res);
+  auto res = mailbox->get_unique<std::string>();
+
+  xbt_assert(*res == "Some data", "Data received: %s", res->c_str());
   XBT_INFO("Data successfully received from regular mailbox");
-  xbt_free(res);
   sendComm->wait();
 
-  simgrid::s4u::MailboxPtr mailbox2 = simgrid::s4u::Mailbox::byName("mailbox2");
-  mailbox2->setReceiver(simgrid::s4u::Actor::self());
+  simgrid::s4u::Mailbox* mailbox2 = simgrid::s4u::Mailbox::by_name("mailbox2");
+  mailbox2->set_receiver(simgrid::s4u::Actor::self());
 
-  simgrid::s4u::this_actor::dsend(mailbox2, xbt_strdup("More data"), 0);
+  mailbox2->put_init(new std::string("More data"), 0)->detach();
 
   xbt_assert(mailbox2->listen()); // used to break.
   XBT_INFO("Task listen works on asynchronous mailboxes");
 
-  res = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox2));
-  xbt_assert(not strcmp("More data", res));
-  xbt_free(res);
+  res = mailbox2->get_unique<std::string>();
+  xbt_assert(*res == "More data");
 
   XBT_INFO("Data successfully received from asynchronous mailbox");
-  XBT_DEBUG("comm:%p", sendComm);
 }
 
 int main(int argc, char* argv[])
 {
-  simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, argv);
-  e->loadPlatform(argv[1]);
+  simgrid::s4u::Engine e(&argc, argv);
+  e.load_platform(argv[1]);
+
+  simgrid::s4u::Actor::create("test", e.host_by_name("Tremblay"), server);
 
-  simgrid::s4u::Actor::createActor("test", simgrid::s4u::Host::by_name("Tremblay"), server);
+  e.run();
 
-  e->run();
   return 0;
 }