#include "xbt/functional.hpp"
#include "xbt/log.h"
#include "xbt/sysdep.h"
+#include "xbt/utility.hpp"
#include "simgrid/s4u/Host.hpp"
XBT_DEBUG("%p should not be run anymore",process);
simix_global->process_list.erase(process->pid);
- if (process->host)
- xbt_swag_remove(process, process->host->extension<simgrid::simix::Host>()->process_list);
+ if (process->host && process->host_process_list_hook.is_linked())
+ simgrid::xbt::intrusive_erase(process->host->extension<simgrid::simix::Host>()->process_list, *process);
xbt_swag_insert(process, simix_global->process_to_destroy);
process->context->iwannadie = 0;
host->extension_set<simgrid::simix::Host>(new simgrid::simix::Host());
/* Add the process to its host process list */
- xbt_swag_insert(process, host->extension<simgrid::simix::Host>()->process_list);
+ host->extension<simgrid::simix::Host>()->process_list.push_back(*process);
XBT_DEBUG("Start context '%s'", process->name.c_str());
process->setProperty(kv.first, kv.second);
/* Add the process to it's host process list */
- xbt_swag_insert(process, host->extension<simgrid::simix::Host>()->process_list);
+ host->extension<simgrid::simix::Host>()->process_list.push_back(*process);
/* Now insert it in the global process list and in the process to run list */
simix_global->process_list[process->pid] = process;
*/
void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) {
+ if (process->finished) {
+ XBT_DEBUG("Ignoring request to kill process %s@%s that is already dead", process->getCname(),
+ process->host->getCname());
+ return;
+ }
+
XBT_DEBUG("Killing process %s@%s", process->getCname(), process->host->getCname());
process->context->iwannadie = 1;
void SIMIX_process_change_host(smx_actor_t process, sg_host_t dest)
{
xbt_assert((process != nullptr), "Invalid parameters");
- xbt_swag_remove(process, process->host->extension<simgrid::simix::Host>()->process_list);
+ simgrid::xbt::intrusive_erase(process->host->extension<simgrid::simix::Host>()->process_list, *process);
process->host = dest;
- xbt_swag_insert(process, dest->extension<simgrid::simix::Host>()->process_list);
+ dest->extension<simgrid::simix::Host>()->process_list.push_back(*process);
}
void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_actor_t process)