+/** \ingroup m_process_management
+ * \param process poor victim
+ *
+ * This function simply kills a \a process... scarry isn't it ? :)
+ */
+void MSG_process_kill(m_process_t process)
+{
+ int i;
+ simdata_process_t p_simdata = process->simdata;
+ simdata_host_t h_simdata= p_simdata->host->simdata;
+
+/* fprintf(stderr,"Killing %s(%d) on %s.\n",process->name, */
+/* p_simdata->PID,p_simdata->host->name); */
+
+ for (i=0; i<msg_global->max_channel; i++) {
+ if (h_simdata->sleeping[i] == process) {
+ h_simdata->sleeping[i] = NULL;
+ break;
+ }
+ }
+ if (i==msg_global->max_channel) {
+ if(p_simdata->waiting_task) {
+ if(p_simdata->waiting_task->simdata->compute)
+ surf_workstation_resource->common_public->
+ action_free(p_simdata->waiting_task->simdata->compute);
+ else if (p_simdata->waiting_task->simdata->comm)
+ 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");
+ } else { /* Must be trying to put a task somewhere */
+ fprintf(stderr,"UNKNOWN STATUS. Please report this bug.\n");
+ }
+ }
+
+ xbt_fifo_remove(msg_global->process_list,process);
+ xbt_context_free(process->simdata->context);
+}
+