* \brief Creates and runs a new #m_process_t.
*
* Does exactly the same as #MSG_process_create_with_arguments but without
- providing standard arguments (\a argc, \a argv).
+ providing standard arguments (\a argc, \a argv, \a start_time, \a kill_time).
* \sa MSG_process_create_with_arguments
*/
m_process_t MSG_process_create(const char *name,
int i;
simdata_process_t p_simdata = process->simdata;
simdata_host_t h_simdata= p_simdata->host->simdata;
+ int _cursor;
+ m_process_t proc = NULL;
/* fprintf(stderr,"Killing %s(%d) on %s.\n",process->name, */
/* p_simdata->PID,p_simdata->host->name); */
}
if (i==msg_global->max_channel) {
if(p_simdata->waiting_task) {
+ xbt_dynar_foreach(p_simdata->waiting_task->simdata->sleeping,_cursor,proc) {
+ if(proc==process)
+ xbt_dynar_remove_at(p_simdata->waiting_task->simdata->sleeping,_cursor,&proc);
+ }
if(p_simdata->waiting_task->simdata->compute)
surf_workstation_resource->common_public->
action_free(p_simdata->waiting_task->simdata->compute);
surf_workstation_resource->common_public->
action_change_state(p_simdata->waiting_task->simdata->comm,SURF_ACTION_FAILED);
else
- fprintf(stderr,"UNKNOWN STATUS. Please report this bug.\n");
+ CRITICAL0("UNKNOWN STATUS. Please report this bug.");
} else { /* Must be trying to put a task somewhere */
- fprintf(stderr,"UNKNOWN STATUS. Please report this bug.\n");
+ if(process==MSG_process_self()) {
+ return;
+ } else {
+ CRITICAL0("UNKNOWN STATUS. Please report this bug.");
+ }
}
}
+ xbt_fifo_remove(msg_global->process_to_run,process);
xbt_fifo_remove(msg_global->process_list,process);
xbt_context_free(process->simdata->context);
}
*/
m_process_t MSG_process_self(void)
{
- return msg_global->current_process;
+ return msg_global ? msg_global->current_process : NULL;
}
/** \ingroup m_process_management