Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
document last change
[simgrid.git] / src / msg / global.c
index 5c60759..26faad1 100644 (file)
@@ -54,6 +54,10 @@ void MSG_global_init(int *argc, char **argv)
     msg_global->current_process = NULL;
     msg_global->registered_functions = xbt_dict_new();
     msg_global->PID = 1;
+    msg_global->task_mallocator = xbt_mallocator_new(256,
+                                                    (pvoid_f_void_t*) task_mallocator_new_f,
+                                                    (void_f_pvoid_t*) task_mallocator_free_f,
+                                                    (void_f_pvoid_t*) task_mallocator_reset_f);
   }
 }
 
@@ -282,7 +286,7 @@ int MSG_get_channel_number(void)
   return msg_global->max_channel;
 }
 
-void __MSG_display_process_status(void) 
+void __MSG_display_process_status(void)
 {
    m_process_t process = NULL;
    xbt_fifo_item_t item = NULL;
@@ -296,17 +300,17 @@ void __MSG_display_process_status(void)
    xbt_fifo_foreach(msg_global->process_list,item,process,m_process_t) {
       simdata_process_t p_simdata = (simdata_process_t) process->simdata;
       simdata_host_t h_simdata=(simdata_host_t)p_simdata->host->simdata;
-      
-      
-      INFO4("MSG:  %s(%d) on %s: %s",
-           process->name,p_simdata->PID,
-           p_simdata->host->name,
-           (process->simdata->blocked)?"[blocked] "
-           :((process->simdata->suspended)?"[suspended] ":""));
+      char *who;
+       
+      asprintf(&who,"MSG:  %s(%d) on %s: %s",
+              process->name,p_simdata->PID,
+              p_simdata->host->name,
+              (process->simdata->blocked)?"[blocked] "
+              :((process->simdata->suspended)?"[suspended] ":""));
       
       for (i=0; i<msg_global->max_channel; i++) {
         if (h_simdata->sleeping[i] == process) {
-           INFO1("\tListening on channel %d.",i);
+           INFO2("%s\tListening on channel %d",who,i);
            break;
         }
       }
@@ -314,25 +318,26 @@ void __MSG_display_process_status(void)
         if(p_simdata->waiting_task) {
            if(p_simdata->waiting_task->simdata->compute) {
               if(p_simdata->put_host) {
-                 INFO2("\tTrying to send a task to Host %s, channel %d.",
-                       p_simdata->put_host->name, p_simdata->put_channel);
+                 INFO4("%s\tTrying to send the task '%s' to Host %s, channel %d.",
+                       who, p_simdata->waiting_task->name,p_simdata->put_host->name, p_simdata->put_channel);
               } else {
-                 INFO1("Waiting for %s to finish.",p_simdata->waiting_task->name);
+                 INFO2("%s\tWaiting for %s to finish.",who,p_simdata->waiting_task->name);
               }
            } else if (p_simdata->waiting_task->simdata->comm) {
-              INFO1("Waiting for %s to be finished transfered.",
-                    p_simdata->waiting_task->name);
+              INFO2("%s\tWaiting for %s to be finished transfered.",
+                    who,p_simdata->waiting_task->name);
            } else {
-             INFO0("UNKNOWN STATUS. Please report this bug.");
+             INFO1("%s\tUNKNOWN STATUS. Please report this bug.",who);
            }
 /*         The following would display the trace of where the maestro thread is, 
             since this is the thread calling this. I'd like to get the other threads to 
             run this to see where they were blocked, but I'm not sure of how to do this */
 /*         xbt_backtrace_display(); */
         } else { /* Must be trying to put a task somewhere */
-           INFO0("UNKNOWN STATUS. Please report this bug.");
+           INFO1("%s\tUNKNOWN STATUS. Please report this bug.",who);
         }
-      } 
+      }
+      free(who);
    }
 }
 
@@ -471,7 +476,7 @@ MSG_error_t MSG_main(void)
   }
 
   if (xbt_fifo_size(msg_global->process_list) == 0) {
-    INFO0("Congratulations ! Simulation terminated : all process are over");
+    INFO0("Congratulations ! Simulation terminated : all processes are over");
     return MSG_OK;
   } else {
     INFO0("Oops ! Deadlock or code not perfectly clean.");
@@ -539,6 +544,7 @@ MSG_error_t MSG_clean(void)
   xbt_fifo_free(msg_global->process_to_run);
   xbt_fifo_free(msg_global->process_list);
   xbt_dict_free(&(msg_global->registered_functions));
+  xbt_mallocator_free(msg_global->task_mallocator);
 
   if(msg_global->paje_output) {
     fclose(msg_global->paje_output);