- 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); */
-
- 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) {
- 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);
- 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);
- surf_workstation_resource->common_public->
- action_free(p_simdata->waiting_task->simdata->comm);
- } else
- CRITICAL0("UNKNOWN STATUS. Please report this bug.");
- } else { /* Must be trying to put a task somewhere */
- if(process==MSG_process_self()) {
- return;
- } else {
- CRITICAL0("UNKNOWN STATUS. Please report this bug.");
- }
- }
+#ifdef HAVE_TRACING
+ TRACE_msg_process_kill(process);
+#endif
+
+ /* FIXME: why do we only cancel communication actions? is this useful? */
+ simdata_process_t p_simdata = SIMIX_req_process_get_data(process);
+ if (p_simdata->waiting_task && p_simdata->waiting_task->simdata->comm) {
+ SIMIX_req_comm_cancel(p_simdata->waiting_task->simdata->comm);