- xbt_assert0(((process != NULL) && (process->simdata)), "Invalid parameters");
-
- return (process->simdata->suspended);
-}
-
-static char blocked_name[512];
-
-int __MSG_process_block(double max_duration)
-{
- m_process_t process = MSG_process_self();
-
- m_task_t dummy = MSG_TASK_UNINITIALIZED;
- snprintf(blocked_name,512,"blocked (%s:%s)",process->name,
- process->simdata->host->name);
-
- XBT_IN1(": max_duration=%g",max_duration);
-
- dummy = MSG_task_create(blocked_name, 0.0, 0, NULL);
-
- PAJE_PROCESS_PUSH_STATE(process,"B",NULL);
-
- process->simdata->blocked=1;
- __MSG_task_execute(process,dummy);
- surf_workstation_resource->common_public->suspend(dummy->simdata->compute);
- if(max_duration>=0)
- surf_workstation_resource->common_public->set_max_duration(dummy->simdata->compute,
- max_duration);
- __MSG_wait_for_computation(process,dummy);
- MSG_task_destroy(dummy);
- process->simdata->blocked=0;
-
- if(process->simdata->suspended) {
- DEBUG0("I've been suspended in the meantime");
- MSG_process_suspend(process);
- DEBUG0("I've been resumed, let's keep going");
- }
-
- XBT_OUT;
- return 1;
-}
-
-MSG_error_t __MSG_process_unblock(m_process_t process)
-{
- simdata_process_t simdata = NULL;
- simdata_task_t simdata_task = NULL;
-
- xbt_assert0(((process != NULL) && (process->simdata)), "Invalid parameters");
- CHECK_HOST();
-
- XBT_IN2(": %s unblocking %s", MSG_process_self()->name,process->name);
-
- simdata = process->simdata;
- if(!(simdata->waiting_task)) {
- xbt_assert0(0,"Process not waiting for anything else. Weird !");
- XBT_OUT;
- return MSG_WARNING;
- }
- simdata_task = simdata->waiting_task->simdata;
-
- xbt_assert0(simdata->blocked,"Process not blocked");
-
- surf_workstation_resource->common_public->resume(simdata_task->compute);
-
- PAJE_PROCESS_POP_STATE(process);
-
- XBT_OUT;
-
- MSG_RETURN(MSG_OK);