X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/08668c93eec47c236766aae49bc39e3c772180f9..f8498e93073ae2ad6e6e19571ecf52c9104edbd0:/src/kernel/actor/ActorImpl.cpp diff --git a/src/kernel/actor/ActorImpl.cpp b/src/kernel/actor/ActorImpl.cpp index 3a5938bfb0..af4a2b5844 100644 --- a/src/kernel/actor/ActorImpl.cpp +++ b/src/kernel/actor/ActorImpl.cpp @@ -207,8 +207,7 @@ void ActorImpl::exit() if (exec != nullptr && exec->surf_action_) { exec->cancel(); - exec->surf_action_->unref(); - exec->surf_action_ = nullptr; + exec->clean_action(); } else if (comm != nullptr) { comms.remove(waiting_synchro); comm->cancel(); @@ -217,8 +216,7 @@ void ActorImpl::exit() if (i != waiting_synchro->simcalls_.end()) waiting_synchro->simcalls_.remove(&simcall); } else if (sleep != nullptr) { - if (sleep->surf_action_) - sleep->surf_action_->cancel(); + sleep->cancel(); sleep->post(); } else if (raw != nullptr) { raw->finish(); @@ -226,8 +224,7 @@ void ActorImpl::exit() io->cancel(); } else { simgrid::kernel::activity::ActivityImplPtr activity = waiting_synchro; - xbt_die("Activity %s is of unknown type %s", activity->get_cname(), - simgrid::xbt::demangle(typeid(activity).name()).get()); + xbt_die("Activity is of unknown type %s", simgrid::xbt::demangle(typeid(activity).name()).get()); } waiting_synchro = nullptr; @@ -413,11 +410,9 @@ activity::ActivityImplPtr ActorImpl::sleep(double duration) throw_exception(std::make_exception_ptr(simgrid::HostFailureException( XBT_THROW_POINT, std::string("Host ") + host_->get_cname() + " failed, you cannot sleep there."))); - return activity::SleepImplPtr(new activity::SleepImpl()) - ->set_name("sleep") - ->set_host(host_) - ->set_duration(duration) - ->start(); + activity::SleepImpl* sleep = new activity::SleepImpl(); + (*sleep).set_name("sleep").set_host(host_).set_duration(duration).start(); + return activity::SleepImplPtr(sleep); } void ActorImpl::throw_exception(std::exception_ptr e) @@ -442,7 +437,7 @@ void ActorImpl::throw_exception(std::exception_ptr e) activity::SleepImplPtr sleep = boost::dynamic_pointer_cast(waiting_synchro); if (sleep != nullptr) { - SIMIX_process_sleep_destroy(sleep); + sleep->clean_action(); if (std::find(begin(simix_global->actors_to_run), end(simix_global->actors_to_run), this) == end(simix_global->actors_to_run) && this != SIMIX_process_self()) { @@ -593,7 +588,7 @@ void SIMIX_process_throw(smx_actor_t actor, xbt_errcat_t cat, int value, const c simgrid::kernel::activity::SleepImplPtr sleep = boost::dynamic_pointer_cast(actor->waiting_synchro); if (sleep != nullptr) { - SIMIX_process_sleep_destroy(sleep); + sleep->clean_action(); if (std::find(begin(simix_global->actors_to_run), end(simix_global->actors_to_run), actor) == end(simix_global->actors_to_run) && actor != SIMIX_process_self()) { @@ -694,16 +689,6 @@ void simcall_HANDLER_process_sleep(smx_simcall_t simcall, double duration) simcall->issuer->waiting_synchro = sync; } -void SIMIX_process_sleep_destroy(simgrid::kernel::activity::SleepImplPtr sleep) -{ - XBT_DEBUG("Destroy sleep synchro %p", sleep.get()); - - if (sleep->surf_action_) { - sleep->surf_action_->unref(); - sleep->surf_action_ = nullptr; - } -} - /** * @brief Calling this function makes the process to yield. *