Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Functions added and changed. Keeps the cvs updated.
[simgrid.git] / src / msg_simix / msg_simix_process.c
index a40a81a..869d0c4 100644 (file)
@@ -3,6 +3,8 @@
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
 
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg, "Logging specific to MSG (process)");
+
 /** \defgroup m_process_management Management Functions of Agents
  *  \brief This section describes the agent structure of MSG
  *  (#m_process_t) and the functions for managing it.
@@ -90,6 +92,7 @@ m_process_t MSG_process_create_with_arguments(const char *name,
 
   /* Simulator Data */
   simdata->PID = msg_global->PID++;
+       simdata->waiting_task = NULL;
   simdata->host = host;
   simdata->argc = argc;
   simdata->argv = argv;
@@ -119,46 +122,20 @@ m_process_t MSG_process_create_with_arguments(const char *name,
  */
 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;
-  int _cursor;
-  m_process_t proc = NULL;
 
   DEBUG3("Killing %s(%d) on %s",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(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);
+       if(p_simdata->waiting_task) {
+               DEBUG1("Canceling waiting task %s",p_simdata->waiting_task->name);
+    if(p_simdata->waiting_task->simdata->compute) {
+                       SIMIX_action_cancel(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 {
-      xbt_die("UNKNOWN STATUS. Please report this bug.");                                                                                                    
-    }  
-  }    
-
-  if ((i==msg_global->max_channel) && (process!=MSG_process_self()) &&                                                                                       
-      (!p_simdata->waiting_task)) {
-    xbt_die("UNKNOWN STATUS. Please report this bug.");                                                                                                      
+                       SIMIX_action_cancel(p_simdata->waiting_task->simdata->comm);
+    } 
   }
-*/
+
   xbt_fifo_remove(msg_global->process_list,process);
        SIMIX_process_kill(process->simdata->smx_process);
 
@@ -310,7 +287,7 @@ m_process_t MSG_process_self(void)
        smx_process_t proc = SIMIX_process_self();
        if (proc != NULL) {
                return (m_process_t)proc->data;
-               }
+       }
        else { 
                return NULL;
        }