X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/35e66f1b2c4ea53b8d44b527e27cdd10e16b3d55..d236809e6149a03ef3e53599458f51c98f79f94d:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 42853860d0..bc9956a428 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -1,23 +1,24 @@ -/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2022. 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. */ -#include "simgrid/Exception.hpp" -#include "simgrid/actor.h" -#include "simgrid/modelchecker.h" -#include "simgrid/s4u/Actor.hpp" -#include "simgrid/s4u/Exec.hpp" -#include "simgrid/s4u/Host.hpp" -#include "simgrid/s4u/VirtualMachine.hpp" +#include +#include +#include +#include +#include +#include +#include + #include "src/include/mc/mc.h" #include "src/kernel/EngineImpl.hpp" -#include "src/kernel/activity/ExecImpl.hpp" +#include "src/kernel/actor/ActorImpl.hpp" +#include "src/kernel/context/Context.hpp" #include "src/mc/mc_replay.hpp" #include "src/surf/HostImpl.hpp" #include -#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_actor, s4u, "S4U actors"); @@ -32,10 +33,6 @@ xbt::signal s4u::Actor::on_suspend; xbt::signal s4u::Actor::on_resume; xbt::signal s4u::Actor::on_sleep; xbt::signal s4u::Actor::on_wake_up; -#ifndef DOXYGEN -xbt::signal s4u::Actor::on_migration_start; // XBT_ATTRIB_DEPRECATED_v329 -xbt::signal s4u::Actor::on_migration_end; // XBT_ATTRIB_DEPRECATED_v329 -#endif xbt::signal s4u::Actor::on_host_change; xbt::signal s4u::Actor::on_termination; xbt::signal s4u::Actor::on_destruction; @@ -116,7 +113,7 @@ void Actor::join(double timeout) const const kernel::actor::ActorImpl* target = pimpl_; kernel::actor::simcall_blocking([issuer, target, timeout] { if (target->finished_) { - // The joined process is already finished, just wake up the issuer right away + // The joined actor is already finished, just wake up the issuer right away issuer->simcall_answer(); } else { kernel::activity::ActivityImplPtr sync = issuer->join(target, timeout); @@ -144,16 +141,6 @@ void Actor::on_exit(const std::function& fun) const void Actor::set_host(Host* new_host) { - if (s4u::Actor::on_migration_start.get_slot_count() > 0) { // XBT_ATTRIB_DEPRECATED_v329 - static bool already_warned = false; - if (not already_warned) { - XBT_INFO("Please use s4u::Actor::on_host_change instead of s4u::Actor::on_migration_start. This will be removed " - "in v3.29"); - already_warned = true; - } - s4u::Actor::on_migration_start(*this); - } - const s4u::Host* previous_location = get_host(); kernel::actor::simcall([this, new_host]() { @@ -165,16 +152,6 @@ void Actor::set_host(Host* new_host) this->pimpl_->set_host(new_host); }); - if (s4u::Actor::on_migration_end.get_slot_count() > 0) { // XBT_ATTRIB_DEPRECATED_v329 - static bool already_warned = false; - if (not already_warned) { - XBT_INFO("Please use s4u::Actor::on_host_change instead of s4u::Actor::on_migration_end. This will be removed in " - "v3.29"); - already_warned = true; - } - s4u::Actor::on_migration_end(*this); - } - s4u::Actor::on_host_change(*this, *previous_location); } @@ -193,6 +170,12 @@ bool Actor::is_daemon() const return this->pimpl_->is_daemon(); } +bool Actor::is_maestro() +{ + const auto* self = kernel::actor::ActorImpl::self(); + return self == nullptr || kernel::EngineImpl::get_instance()->is_maestro(self); +} + const simgrid::xbt::string& Actor::get_name() const { return this->pimpl_->get_name(); @@ -308,7 +291,7 @@ namespace this_actor { */ bool is_maestro() { - return SIMIX_is_maestro(); + return Actor::is_maestro(); } void sleep_for(double duration) @@ -352,7 +335,7 @@ void yield() XBT_PUBLIC void sleep_until(double wakeup_time) { - double now = SIMIX_get_clock(); + double now = s4u::Engine::get_clock(); if (wakeup_time > now) sleep_for(wakeup_time - now); } @@ -373,12 +356,6 @@ void parallel_execute(const std::vector& hosts, const std::vectorwait(); } -void parallel_execute(const std::vector& hosts, const std::vector& flops_amounts, - const std::vector& bytes_amounts, double timeout) // XBT_ATTRIB_DEPRECATED_v329 -{ - exec_init(hosts, flops_amounts, bytes_amounts)->wait_for(timeout); -} - ExecPtr exec_init(double flops_amount) { return Exec::init()->set_flops_amount(flops_amount)->set_host(get_host()); @@ -387,7 +364,7 @@ ExecPtr exec_init(double flops_amount) ExecPtr exec_init(const std::vector& hosts, const std::vector& flops_amounts, const std::vector& bytes_amounts) { - xbt_assert(hosts.size() > 0, "Your parallel executions must span over at least one host."); + xbt_assert(not hosts.empty(), "Your parallel executions must span over at least one host."); xbt_assert(hosts.size() == flops_amounts.size() || flops_amounts.empty(), "Host count (%zu) does not match flops_amount count (%zu).", hosts.size(), flops_amounts.size()); xbt_assert(hosts.size() * hosts.size() == bytes_amounts.size() || bytes_amounts.empty(), @@ -453,6 +430,7 @@ void exit() { kernel::actor::ActorImpl* self = simgrid::kernel::actor::ActorImpl::self(); simgrid::kernel::actor::simcall([self] { self->exit(); }); + THROW_IMPOSSIBLE; } void on_exit(const std::function& fun) @@ -468,10 +446,6 @@ void set_host(Host* new_host) { simgrid::kernel::actor::ActorImpl::self()->get_iface()->set_host(new_host); } -void migrate(Host* new_host) // XBT_ATTRIB_DEPRECATED_v329 -{ - set_host(new_host); -} } // namespace this_actor } // namespace s4u @@ -490,7 +464,7 @@ sg_actor_t* sg_actor_list() xbt_assert(actor_count > 0, "There is no actor!"); std::vector actors = e->get_all_actors(); - sg_actor_t* res = xbt_new(sg_actor_t, actors.size()); + auto* res = xbt_new(sg_actor_t, actors.size()); for (size_t i = 0; i < actor_count; i++) res[i] = actors[i].get(); return res; @@ -563,21 +537,6 @@ sg_actor_t sg_actor_by_pid(aid_t pid) return simgrid::s4u::Actor::by_pid(pid).get(); } -aid_t sg_actor_get_PID(const_sg_actor_t actor) // XBT_ATTRIB_DEPRECATED_v331 -{ - return sg_actor_get_pid(actor); -} - -aid_t sg_actor_get_PPID(const_sg_actor_t actor) // XBT_ATTRIB_DEPRECATED_v331 -{ - return sg_actor_get_ppid(actor); -} - -sg_actor_t sg_actor_by_PID(aid_t pid) // XBT_ATTRIB_DEPRECATED_v331 -{ - return sg_actor_by_pid(pid); -} - /** @brief Return the name of an actor. */ const char* sg_actor_get_name(const_sg_actor_t actor) { @@ -687,10 +646,6 @@ void sg_actor_set_host(sg_actor_t actor, sg_host_t host) { actor->set_host(host); } -void sg_actor_migrate(sg_actor_t process, sg_host_t host) // XBT_ATTRIB_DEPRECATED_v329 -{ - process->set_host(host); -} /** * @brief Wait for the completion of a #sg_actor_t. @@ -751,7 +706,7 @@ sg_actor_t sg_actor_attach(const char* name, void* data, sg_host_t host, xbt_dic props[key] = value; xbt_dict_free(&properties); - /* Let's create the process: SIMIX may decide to start it right now, even before returning the flow control to us */ + /* Let's create the actor: SIMIX may decide to start it right now, even before returning the flow control to us */ smx_actor_t actor = nullptr; try { actor = simgrid::kernel::actor::ActorImpl::attach(name, data, host).get(); @@ -786,7 +741,7 @@ const char* sg_actor_self_get_name() void* sg_actor_self_get_data() { - return simgrid::s4u::Actor::self()->get_data(); + return simgrid::s4u::Actor::self()->get_data(); } void sg_actor_self_set_data(void* userdata) @@ -794,26 +749,11 @@ void sg_actor_self_set_data(void* userdata) simgrid::s4u::Actor::self()->set_data(userdata); } -void* sg_actor_self_data() // XBT_ATTRIB_DEPRECATED_v330 -{ - return sg_actor_self_get_data(); -} - -void sg_actor_self_data_set(void* userdata) // XBT_ATTRIB_DEPRECATED_v330 -{ - sg_actor_self_set_data(userdata); -} - sg_actor_t sg_actor_self() { return simgrid::s4u::Actor::self(); } -void sg_actor_self_execute(double flops) // XBT_ATTRIB_DEPRECATED_v330 -{ - simgrid::s4u::this_actor::execute(flops); -} - void sg_actor_execute(double flops) { simgrid::s4u::this_actor::execute(flops); @@ -850,7 +790,7 @@ void sg_actor_unref(const_sg_actor_t actor) /** @brief Return the user data of a #sg_actor_t */ void* sg_actor_get_data(const_sg_actor_t actor) { - return actor->get_data(); + return actor->get_data(); } /** @brief Set the user data of a #sg_actor_t */ @@ -859,19 +799,9 @@ void sg_actor_set_data(sg_actor_t actor, void* userdata) actor->set_data(userdata); } -void* sg_actor_data(const_sg_actor_t actor) // XBT_ATTRIB_DEPRECATED_v330 -{ - return sg_actor_get_data(actor); -} - -void sg_actor_data_set(sg_actor_t actor, void* userdata) // XBT_ATTRIB_DEPRECATED_v330 -{ - sg_actor_set_data(actor, userdata); -} - -/** @brief Add a function to the list of "on_exit" functions for the current process. - * The on_exit functions are the functions executed when your process is killed. - * You should use them to free the data used by your process. +/** @brief Add a function to the list of "on_exit" functions for the current actor. + * The on_exit functions are the functions executed when your actor is killed. + * You should use them to free the data used by your actor. */ void sg_actor_on_exit(void_f_int_pvoid_t fun, void* data) {