Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Finally the Java interface is working again! (It was broken because of
[simgrid.git] / src / simix / smx_process.c
index 80fac61..f6e37a7 100644 (file)
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix,
                                 "Logging specific to SIMIX (process)");
 
-/******************************** Process ************************************/
 /**
  * \brief Move a process to the list of process to destroy. *
  */
-
 void SIMIX_process_cleanup(void *arg)
 {
   xbt_swag_remove(arg, simix_global->process_to_run);
@@ -36,27 +34,17 @@ void SIMIX_process_cleanup(void *arg)
 void SIMIX_process_empty_trash(void)
 { 
   smx_process_t process = NULL;
-  int i;  
 
   while ((process = xbt_swag_extract(simix_global->process_to_destroy))){
+    SIMIX_context_free(process->context);
     free(process->name);
     process->name = NULL;
-  
-    if (process->argv) {
-      for (i = 0; i < process->argc; i++)
-        if (process->argv[i])
-          free(process->argv[i]);
-
-      free(process->argv);
-    }
-  
     free(process);
   }
 }
 
 /**
  * \brief Creates and runs the maestro process
- *
  */
 void __SIMIX_create_maestro_process()
 {
@@ -66,8 +54,8 @@ void __SIMIX_create_maestro_process()
   /* Process data */
   process->name = (char *)"";
 
-  /* Create the right context type */
-  process->context = SIMIX_context_create_maestro();
+  /* Create a dummy context for maestro */
+  process->context = SIMIX_context_new(NULL, 0, NULL, NULL, NULL);
 
   /* Set it as the maestro process */
   simix_global->maestro_process = process;
@@ -111,18 +99,16 @@ smx_process_t SIMIX_process_create(const char *name,
   /* Process data */
   process->name = xbt_strdup(name);
   process->smx_host = host;
-  process->argc = argc;
-  process->argv = argv;
   process->mutex = NULL;
   process->cond = NULL;
   process->iwannadie = 0;
 
   VERB1("Create context %s", process->name);
-  process->context = SIMIX_context_new(code);
+  process->context = SIMIX_context_new(code, argc, argv, 
+                                       simix_global->cleanup_process_function,
+                                       process);
 
   process->data = data;
-  process->cleanup_func = simix_global->cleanup_process_function;
-  process->cleanup_arg = process;
 
   /* Add properties */
   process->properties = properties;
@@ -174,11 +160,12 @@ void SIMIX_jprocess_create(const char *name, smx_host_t host,
   /* Process data */
   process->name = xbt_strdup(name);
   process->smx_host = host;
-  process->argc = 0;
-  process->argv = NULL;
   process->mutex = NULL;
   process->cond = NULL;
-  SIMIX_context_new(jprocess);
+  process->context = SIMIX_context_new(jprocess, 0, NULL, 
+                                       simix_global->cleanup_process_function,
+                                       process);
+
   process->data = data;
 
   /* Add the process to it's host process list */
@@ -218,7 +205,7 @@ void SIMIX_process_kill(smx_process_t process)
 
   /* If I'm killing myself then stop otherwise schedule the process to kill */
   if (process == SIMIX_process_self())
-    SIMIX_context_stop(1);
+    SIMIX_context_stop(process->context);
   else
     __SIMIX_process_schedule(process);
   
@@ -457,7 +444,7 @@ void __SIMIX_process_yield(void)
   SIMIX_context_suspend(simix_global->current_process->context);
 
   if (simix_global->current_process->iwannadie)
-    SIMIX_context_stop(1);
+    SIMIX_context_stop(simix_global->current_process->context);
 }
 
 void __SIMIX_process_schedule(smx_process_t new_process)