X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1c9d1059a9299bcfe07778802cf1d9da64016838..cc4ca208c5e056ac569cd07e08f09a416f3606fe:/src/simix/ActorImpl.cpp diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 1491a9e4c6..2db4aeb504 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -115,11 +115,11 @@ void SIMIX_process_cleanup(smx_actor_t process) simix_global->process_list.erase(process->pid); if (process->host && process->host_process_list_hook.is_linked()) simgrid::xbt::intrusive_erase(process->host->extension()->process_list, *process); - if (not xbt_swag_belongs(process, simix_global->process_to_destroy)) { + if (not process->smx_destroy_list_hook.is_linked()) { #if SIMGRID_HAVE_MC xbt_dynar_push_as(simix_global->dead_actors_vector, smx_actor_t, process); #endif - xbt_swag_insert(process, simix_global->process_to_destroy); + simix_global->process_to_destroy.push_back(*process); } process->context->iwannadie = 0; @@ -133,12 +133,11 @@ void SIMIX_process_cleanup(smx_actor_t process) */ void SIMIX_process_empty_trash() { - smx_actor_t process = static_cast(xbt_swag_extract(simix_global->process_to_destroy)); - - while (process) { + while (not simix_global->process_to_destroy.empty()) { + smx_actor_t process = &simix_global->process_to_destroy.front(); + simix_global->process_to_destroy.pop_front(); XBT_DEBUG("Getting rid of %p",process); intrusive_ptr_release(process); - process = static_cast(xbt_swag_extract(simix_global->process_to_destroy)); } #if SIMGRID_HAVE_MC xbt_dynar_reset(simix_global->dead_actors_vector); @@ -222,7 +221,7 @@ smx_activity_t ActorImpl::suspend(ActorImpl* issuer) return nullptr; } else { - return SIMIX_execution_start(this, "suspend", 0.0, 1.0, 0.0); + return SIMIX_execution_start("suspend", 0.0, 1.0, 0.0, this->host); } } @@ -501,7 +500,11 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) { boost::dynamic_pointer_cast(process->waiting_synchro); if (exec != nullptr) { - /* Nothing to do */ + if (exec->surfAction_) { + exec->surfAction_->cancel(); + exec->surfAction_->unref(); + exec->surfAction_ = nullptr; + } } else if (comm != nullptr) { process->comms.remove(process->waiting_synchro); comm->cancel(); @@ -549,8 +552,8 @@ void SIMIX_process_throw(smx_actor_t process, xbt_errcat_t cat, int value, const simgrid::kernel::activity::ExecImplPtr exec = boost::dynamic_pointer_cast(process->waiting_synchro); - if (exec != nullptr && exec->surf_exec) - exec->surf_exec->cancel(); + if (exec != nullptr && exec->surfAction_) + exec->surfAction_->cancel(); simgrid::kernel::activity::CommImplPtr comm = boost::dynamic_pointer_cast(process->waiting_synchro);