-/* Copyright (c) 2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2017-2020. 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. */
/* 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"
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));
+ const std::string* res = static_cast<std::string*>(mailbox->get());
- xbt_assert(not strcmp("Some data", res), "Data received: %s", res);
+ xbt_assert(*res == "Some data", "Data received: %s", res->c_str());
XBT_INFO("Data successfully received from regular mailbox");
- xbt_free(res);
+ delete 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::isend(mailbox2, xbt_strdup("More data"), 0)->detach();
+ 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 = static_cast<std::string*>(mailbox2->get());
+ xbt_assert(*res == "More data");
+ delete res;
XBT_INFO("Data successfully received from asynchronous mailbox");
}
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::createActor("test", simgrid::s4u::Host::by_name("Tremblay"), server);
+ simgrid::s4u::Actor::create("test", simgrid::s4u::Host::by_name("Tremblay"), server);
- e->run();
+ e.run();
- delete e;
return 0;
}