- /* If I'm killing myself then stop otherwise schedule the process to kill
- * Two different behaviors, if I'm killing my self, remove from mutex and condition and stop. Otherwise, first we must schedule the process, wait its ending and after remove it from mutex and condition */
- if (process == SIMIX_process_self()) {
- /* Cleanup if we were waiting for something */
- if (process->mutex)
- xbt_swag_remove(process, process->mutex->sleeping);
+ 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)
+{
+ process->suspended = 1;
+
+ /* If we are suspending another process, and it is waiting on an action,
+ suspend it's action. */
+ if (process != issuer) {