DEBUG2("Waiting for a task on channel %d (%s)", channel,h->name);
- while ((t = xbt_fifo_pop(h_simdata->mbox[channel])) == NULL) {
+ while ((t = xbt_fifo_shift(h_simdata->mbox[channel])) == NULL) {
xbt_assert2(!(h_simdata->sleeping[channel]),
"A process (%s(%d)) is already blocked on this channel",
h_simdata->sleeping[channel]->name,
xbt_context_yield();
}
- PAJE_PROCESS_POP_STATE(process);
+ PAJE_PROCESS_POP_STATE(process);
PAJE_COMM_STOP(process,t,channel);
- if(state == SURF_ACTION_DONE) MSG_RETURN(MSG_OK);
- else if(surf_workstation_resource->extension_public->get_state(h_simdata->host)
- == SURF_CPU_OFF)
+ if(state == SURF_ACTION_DONE) {
+ if(surf_workstation_resource->common_public->action_free(t_simdata->comm))
+ t_simdata->comm = NULL;
+ MSG_RETURN(MSG_OK);
+ } else if(surf_workstation_resource->extension_public->get_state(h_simdata->host)
+ == SURF_CPU_OFF) {
+ if(surf_workstation_resource->common_public->action_free(t_simdata->comm))
+ t_simdata->comm = NULL;
MSG_RETURN(MSG_HOST_FAILURE);
- else MSG_RETURN(MSG_TRANSFER_FAILURE);
+ } else {
+ if(surf_workstation_resource->common_public->action_free(t_simdata->comm))
+ t_simdata->comm = NULL;
+ MSG_RETURN(MSG_TRANSFER_FAILURE);
+ }
}
/** \ingroup msg_gos_functions
process->simdata->put_channel = channel;
while(!(task_simdata->comm))
__MSG_process_block();
+ surf_workstation_resource->common_public->action_use(task_simdata->comm);
process->simdata->put_host = NULL;
process->simdata->put_channel = -1;
PAJE_PROCESS_POP_STATE(process);
- if(state == SURF_ACTION_DONE) MSG_RETURN(MSG_OK);
- else if(surf_workstation_resource->extension_public->get_state(local_host->simdata->host)
- == SURF_CPU_OFF)
+ if(state == SURF_ACTION_DONE) {
+ if(surf_workstation_resource->common_public->action_free(task_simdata->comm))
+ task_simdata->comm = NULL;
+ MSG_RETURN(MSG_OK);
+ } else if(surf_workstation_resource->extension_public->get_state(local_host->simdata->host)
+ == SURF_CPU_OFF) {
+ if(surf_workstation_resource->common_public->action_free(task_simdata->comm))
+ task_simdata->comm = NULL;
MSG_RETURN(MSG_HOST_FAILURE);
- else MSG_RETURN(MSG_TRANSFER_FAILURE);
+ } else {
+ if(surf_workstation_resource->common_public->action_free(task_simdata->comm))
+ task_simdata->comm = NULL;
+ MSG_RETURN(MSG_TRANSFER_FAILURE);
+ }
}
/** \ingroup msg_gos_functions
simdata->using--;
- if(state == SURF_ACTION_DONE) MSG_RETURN(MSG_OK);
- else if(surf_workstation_resource->extension_public->
- get_state(MSG_process_get_host(process)->simdata->host)
- == SURF_CPU_OFF)
+ if(state == SURF_ACTION_DONE) {
+ if(surf_workstation_resource->common_public->action_free(simdata->compute))
+ simdata->compute = NULL;
+ 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;
MSG_RETURN(MSG_HOST_FAILURE);
- else MSG_RETURN(MSG_TRANSFER_FAILURE);
+ } else {
+ if(surf_workstation_resource->common_public->action_free(simdata->compute))
+ simdata->compute = NULL;
+ MSG_RETURN(MSG_TRANSFER_FAILURE);
+ }
}
/** \ingroup msg_gos_functions
if(state == SURF_ACTION_DONE) {
if(surf_workstation_resource->extension_public->
get_state(MSG_process_get_host(process)->simdata->host)
- == SURF_CPU_OFF)
+ == SURF_CPU_OFF) {
+ if(surf_workstation_resource->common_public->action_free(simdata->compute))
+ simdata->compute = NULL;
MSG_RETURN(MSG_HOST_FAILURE);
-
+ }
if(__MSG_process_isBlocked(process)) {
__MSG_process_unblock(MSG_process_self());
}
if(surf_workstation_resource->extension_public->
get_state(MSG_process_get_host(process)->simdata->host)
- == SURF_CPU_OFF)
+ == SURF_CPU_OFF) {
+ if(surf_workstation_resource->common_public->action_free(simdata->compute))
+ simdata->compute = NULL;
MSG_RETURN(MSG_HOST_FAILURE);
+ }
+ if(surf_workstation_resource->common_public->action_free(simdata->compute))
+ simdata->compute = NULL;
MSG_task_destroy(dummy);
MSG_RETURN(MSG_OK);
} else MSG_RETURN(MSG_HOST_FAILURE);
*/
int MSG_get_msgload(void)
{
+ m_process_t process;
+
CHECK_HOST();
- xbt_assert0(0,"Not implemented yet!");
- return 1;
+ process = MSG_process_self();
+ return xbt_fifo_size(process->simdata->host->simdata->process_list);
}
/** \ingroup msg_gos_functions