SMX_EXCEPTION(process, cat, value, msg);
if (process->suspended)
- SIMIX_process_resume(process,SIMIX_process_self());
+ SIMIX_process_resume(process);
/* cancel the blocking synchro if any */
if (process->waiting_synchro) {
}
void simcall_HANDLER_process_resume(smx_simcall_t simcall, smx_actor_t process){
- SIMIX_process_resume(process, simcall->issuer);
+ SIMIX_process_resume(process);
}
-void SIMIX_process_resume(smx_actor_t process, smx_actor_t issuer)
+void SIMIX_process_resume(smx_actor_t process)
{
- XBT_IN("process = %p, issuer = %p", process, issuer);
+ XBT_IN("process = %p", process);
if(process->context->iwannadie) {
XBT_VERB("Ignoring request to suspend a process that is currently dying.");
if(!process->suspended) return;
process->suspended = 0;
- /* If we are resuming another process, resume the synchronization it was waiting for
- if any. Otherwise add it to the list of process to run in the next round. */
- if (process != issuer) {
-
- if (process->waiting_synchro) {
- process->waiting_synchro->resume();
- }
- } else XBT_WARN("Strange. Process %p is trying to resume himself.", issuer);
+ /* resume the synchronization that was blocking the resumed process. */
+ if (process->waiting_synchro)
+ process->waiting_synchro->resume();
XBT_OUT();
}
XBT_PRIVATE void SIMIX_process_exception_terminate(xbt_ex_t * e);
XBT_PRIVATE void SIMIX_process_change_host(smx_actor_t process, sg_host_t dest);
XBT_PRIVATE smx_activity_t SIMIX_process_suspend(smx_actor_t process, smx_actor_t issuer);
-XBT_PRIVATE void SIMIX_process_resume(smx_actor_t process, smx_actor_t issuer);
+XBT_PRIVATE void SIMIX_process_resume(smx_actor_t process);
XBT_PRIVATE int SIMIX_process_get_PID(smx_actor_t self);
XBT_PRIVATE void* SIMIX_process_get_data(smx_actor_t process);
XBT_PRIVATE void SIMIX_process_set_data(smx_actor_t process, void *data);
// --
XBT_PRIVATE void SIMIX_vm_save(sg_host_t ind_vm, smx_actor_t issuer);
-XBT_PRIVATE void SIMIX_vm_restore(sg_host_t ind_vm, smx_actor_t issuer);
+XBT_PRIVATE void SIMIX_vm_restore(sg_host_t ind_vm);
// --
XBT_PRIVATE void SIMIX_vm_start(sg_host_t ind_vm);
smx_actor_t smx_process, smx_process_safe;
xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(vm)->process_list) {
XBT_DEBUG("resume %s", smx_process->name.c_str());
- SIMIX_process_resume(smx_process, issuer);
+ SIMIX_process_resume(smx_process);
}
}
*
* @param vm the vm host to restore (a sg_host_t)
*/
-void SIMIX_vm_restore(sg_host_t vm, smx_actor_t issuer)
+void SIMIX_vm_restore(sg_host_t vm)
{
if (SIMIX_vm_get_state(vm) != SURF_VM_STATE_SAVED)
THROWF(vm_error, 0, "VM(%s) was not saved", vm->name().c_str());
smx_actor_t smx_process, smx_process_safe;
xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(vm)->process_list) {
XBT_DEBUG("resume %s", smx_process->name.c_str());
- SIMIX_process_resume(smx_process, issuer);
+ SIMIX_process_resume(smx_process);
}
}
void simcall_HANDLER_vm_restore(smx_simcall_t simcall, sg_host_t vm)
{
- SIMIX_vm_restore(vm, simcall->issuer);
+ SIMIX_vm_restore(vm);
}