X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/92cd12d0b61dd5a17500ef7d38f7b95a80301037..a73d204e173f35c0abb92b26e061929066b8b283:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 4239ef2e40..5859a097b6 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -97,14 +97,13 @@ void Actor::join(double timeout) { auto issuer = SIMIX_process_self(); auto target = pimpl_; - kernel::actor::simcall_blocking([issuer, target, timeout] { + kernel::actor::simcall_blocking([issuer, target, timeout] { if (target->finished_) { // The joined process is already finished, just wake up the issuer right away issuer->simcall_answer(); } else { smx_activity_t sync = issuer->join(target, timeout); - sync->simcalls_.push_back(&issuer->simcall); - issuer->waiting_synchro = sync; + sync->register_simcall(&issuer->simcall); } }); } @@ -121,11 +120,6 @@ void Actor::set_auto_restart(bool autorestart) }); } -void Actor::on_exit(const std::function& fun, void* data) /* deprecated */ -{ - on_exit([fun, data](bool failed) { fun(failed ? SMX_EXIT_FAILURE : SMX_EXIT_SUCCESS, data); }); -} - void Actor::on_exit(const std::function& fun) const { kernel::actor::simcall([this, &fun] { SIMIX_process_on_exit(pimpl_, fun); }); @@ -138,7 +132,7 @@ void Actor::migrate(Host* new_host) kernel::actor::simcall([this, new_host]() { if (pimpl_->waiting_synchro != nullptr) { // The actor is blocked on an activity. If it's an exec, migrate it too. - // FIXME: implement the migration of other kind of activities + // FIXME: implement the migration of other kinds of activities kernel::activity::ExecImplPtr exec = boost::dynamic_pointer_cast(pimpl_->waiting_synchro); xbt_assert(exec.get() != nullptr, "We can only migrate blocked actors when they are blocked on executions."); @@ -190,8 +184,8 @@ void Actor::suspend() auto issuer = SIMIX_process_self(); auto target = pimpl_; s4u::Actor::on_suspend(*this); - kernel::actor::simcall_blocking([issuer, target]() { - target->suspend(issuer); + kernel::actor::simcall_blocking([issuer, target]() { + target->suspend(); if (target != issuer) { /* If we are suspending ourselves, then just do not finish the simcall now */ issuer->simcall_answer(); @@ -221,19 +215,6 @@ double Actor::get_kill_time() return pimpl_->get_kill_time(); } -void Actor::kill(aid_t pid) // deprecated -{ - kernel::actor::ActorImpl* killer = SIMIX_process_self(); - kernel::actor::ActorImpl* victim = SIMIX_process_from_PID(pid); - if (victim != nullptr) { - kernel::actor::simcall([killer, victim] { killer->kill(victim); }); - } else { - std::ostringstream oss; - oss << "kill: (" << pid << ") - No such actor" << std::endl; - throw std::runtime_error(oss.str()); - } -} - void Actor::kill() { kernel::actor::ActorImpl* process = SIMIX_process_self(); @@ -308,16 +289,14 @@ void sleep_for(double duration) kernel::actor::ActorImpl* issuer = SIMIX_process_self(); Actor::on_sleep(*issuer->ciface()); - kernel::actor::simcall_blocking([issuer, duration]() { + kernel::actor::simcall_blocking([issuer, duration]() { if (MC_is_active() || MC_record_replay_is_active()) { MC_process_clock_add(issuer, duration); issuer->simcall_answer(); return; } smx_activity_t sync = issuer->sleep(duration); - sync->simcalls_.push_back(&issuer->simcall); - issuer->waiting_synchro = sync; - + sync->register_simcall(&issuer->simcall); }); Actor::on_wake_up(*issuer->ciface()); @@ -378,27 +357,6 @@ void parallel_execute(const std::vector& hosts, const std::vectorset_timeout(timeout)->wait(); } -// deprecated -void parallel_execute(int host_nb, s4u::Host* const* host_list, const double* flops_amount, const double* bytes_amount, - double timeout) -{ - smx_activity_t s = - simcall_execution_parallel_start("", host_nb, host_list, flops_amount, bytes_amount, /* rate */ -1, timeout); - simcall_execution_wait(s); - delete[] flops_amount; - delete[] bytes_amount; -} - -// deprecated -void parallel_execute(int host_nb, s4u::Host* const* host_list, const double* flops_amount, const double* bytes_amount) -{ - smx_activity_t s = simcall_execution_parallel_start("", host_nb, host_list, flops_amount, bytes_amount, - /* rate */ -1, /*timeout*/ -1); - simcall_execution_wait(s); - delete[] flops_amount; - delete[] bytes_amount; -} - ExecPtr exec_init(double flops_amount) { return ExecPtr(new ExecSeq(get_host(), flops_amount)); @@ -444,7 +402,9 @@ Host* get_host() void suspend() { - SIMIX_process_self()->iface()->suspend(); + kernel::actor::ActorImpl* self = SIMIX_process_self(); + s4u::Actor::on_suspend(*self->ciface()); + kernel::actor::simcall_blocking([self] { self->suspend(); }); } void resume() @@ -465,11 +425,6 @@ void on_exit(const std::function& fun) SIMIX_process_self()->iface()->on_exit(fun); } -void on_exit(const std::function& fun, void* data) /* deprecated */ -{ - SIMIX_process_self()->iface()->on_exit([fun, data](bool exit) { fun(exit, data); }); -} - /** @brief Moves the current actor to another host * * @see simgrid::s4u::Actor::migrate() for more information @@ -741,3 +696,14 @@ void sg_actor_unref(sg_actor_t actor) { intrusive_ptr_release(actor); } + +/** @brief Return the user data of a #sg_actor_t */ +void* sg_actor_data(sg_actor_t actor) +{ + return actor->get_data(); +} +/** @brief Set the user data of a #sg_actor_t */ +void sg_actor_data_set(sg_actor_t actor, void* userdata) +{ + actor->set_data(userdata); +}