- simdata = task->simdata;
- xbt_assert0((!simdata->compute)&&(task->simdata->using==1),
- "This taks is executed somewhere else. Go fix your code!");
- task->simdata->using++;
- simdata->compute = surf_workstation_resource->extension_public->
- execute(MSG_process_get_host(process)->simdata->host,
- simdata->computation_amount);
- surf_workstation_resource->common_public->
- set_priority(simdata->compute, simdata->priority);
-
- surf_workstation_resource->common_public->action_set_data(simdata->compute,task);
- task->simdata->using--;
-}
-
-MSG_error_t __MSG_wait_for_computation(m_process_t process, m_task_t task)
-{
- e_surf_action_state_t state = SURF_ACTION_NOT_IN_THE_SYSTEM;
- simdata_task_t simdata = task->simdata;
-
- XBT_IN4("(%p(%s) %p(%s))",process,process->name,task,task->name);
- simdata->using++;
- do {
- __MSG_task_wait_event(process, task);
- state=surf_workstation_resource->common_public->action_get_state(simdata->compute);
- } while (state==SURF_ACTION_RUNNING);
- simdata->using--;
-
-
- if(state == SURF_ACTION_DONE) {
- if(surf_workstation_resource->common_public->action_free(simdata->compute))
- simdata->compute = NULL;
- simdata->computation_amount = 0.0;
- XBT_OUT;
- MSG_RETURN(MSG_OK);
- } else if(surf_workstation_resource->extension_public->
- get_state(MSG_process_get_host(process)->simdata->host)
- == SURF_CPU_OFF) {
- if(surf_workstation_resource->common_public->action_free(simdata->compute))
- simdata->compute = NULL;
- XBT_OUT;
- MSG_RETURN(MSG_HOST_FAILURE);
- } else {
- if(surf_workstation_resource->common_public->action_free(simdata->compute))
- simdata->compute = NULL;
- XBT_OUT;
- MSG_RETURN(MSG_TASK_CANCELLED);
- }