+ while ((p = xbt_swag_extract(simix_global->process_list)))
+ SIMIX_process_kill(p, SIMIX_process_self());
+
+ SIMIX_process_empty_trash();
+}
+
+void SIMIX_process_change_host(smx_process_t process,
+ const char *source, const char *dest)
+{
+ smx_host_t h1 = NULL;
+ smx_host_t h2 = NULL;
+ xbt_assert0((process != NULL), "Invalid parameters");
+ h1 = SIMIX_host_get_by_name(source);
+ h2 = SIMIX_host_get_by_name(dest);
+ process->smx_host = h2;
+ xbt_swag_remove(process, h1->process_list);
+ xbt_swag_insert(process, h2->process_list);
+}
+
+void SIMIX_pre_process_suspend(smx_req_t req)
+{
+ smx_process_t process = req->process_suspend.process;
+ SIMIX_process_suspend(process, req->issuer);
+
+ if (process != req->issuer) {
+ SIMIX_request_answer(req);
+ }
+ /* If we are suspending ourselves, then just do not replay the request. */
+}
+
+void SIMIX_process_suspend(smx_process_t process, smx_process_t issuer)
+{
+ xbt_assert0(process, "Invalid parameters");
+
+ process->suspended = 1;
+
+ /* If we are suspending another process, and it is waiting on an action,
+ suspend it's action. */
+ if (process != issuer) {