X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2ad536e710c5936ff8e525e4bbb5e7046f292aac..adbdcbddadcbd685b72259874d1ebfd9cbbcc497:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 1e022aa5ea..573d708555 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -164,6 +164,7 @@ void Actor::set_host(Host* new_host) }); s4u::Actor::on_host_change(*this, *previous_location); + s4u::Actor::on_this_host_change(*this, *previous_location); } s4u::Host* Actor::get_host() const @@ -213,6 +214,7 @@ void Actor::suspend() kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self(); kernel::actor::ActorImpl* target = pimpl_; s4u::Actor::on_suspend(*this); + s4u::Actor::on_this_suspend(*this); kernel::actor::simcall_blocking([issuer, target]() { target->suspend(); if (target != issuer) { @@ -226,6 +228,7 @@ void Actor::resume() { kernel::actor::simcall_answered([this] { pimpl_->resume(); }); s4u::Actor::on_resume(*this); + s4u::Actor::on_this_resume(*this); } bool Actor::is_suspended() const @@ -325,19 +328,25 @@ void sleep_for(double duration) } kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self(); + kernel::actor::ActorSleepSimcall observer(issuer); + Actor::on_sleep(*issuer->get_ciface()); + issuer->get_ciface()->on_this_sleep(*issuer->get_ciface()); - 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; - } - kernel::activity::ActivityImplPtr sync = issuer->sleep(duration); - sync->register_simcall(&issuer->simcall_); - }); + kernel::actor::simcall_blocking( + [issuer, duration]() { + if (MC_is_active() || MC_record_replay_is_active()) { + // MC_process_clock_add(issuer, duration); // BUG: Makes the exploration loop + issuer->simcall_answer(); + } else { + kernel::activity::ActivityImplPtr sync = issuer->sleep(duration); + sync->register_simcall(&issuer->simcall_); + } + }, + &observer); Actor::on_wake_up(*issuer->get_ciface()); + issuer->get_ciface()->on_this_wake_up(*issuer->get_ciface()); } void yield() @@ -413,7 +422,7 @@ ExecPtr exec_async(double flops) aid_t get_pid() { - auto* self = simgrid::kernel::actor::ActorImpl::self(); + const auto* self = simgrid::kernel::actor::ActorImpl::self(); return self ? self->get_pid() : 0; } @@ -429,7 +438,7 @@ std::string get_name() const char* get_cname() { - auto* self = simgrid::kernel::actor::ActorImpl::self(); + const auto* self = simgrid::kernel::actor::ActorImpl::self(); return self ? self->get_cname() : nullptr; } @@ -442,6 +451,7 @@ void suspend() { kernel::actor::ActorImpl* self = simgrid::kernel::actor::ActorImpl::self(); s4u::Actor::on_suspend(*self->get_ciface()); + self->get_ciface()->on_this_suspend(*self->get_ciface()); kernel::actor::simcall_blocking([self] { self->suspend(); }); }