Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
More cleanups in simix and friends. Do not request users to pass a cleanup function...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 11 Jul 2007 11:36:03 +0000 (11:36 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 11 Jul 2007 11:36:03 +0000 (11:36 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3731 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Virtu/sg_process.c
src/include/simix/datatypes.h
src/include/simix/simix.h
src/java/jmsg.c
src/msg/deployment.c
src/msg/m_process.c
src/simix/private.h
src/simix/smx_deployment.c
src/simix/smx_global.c
src/simix/smx_process.c

index 6f09110..f985c86 100644 (file)
@@ -24,8 +24,7 @@ void gras_agent_spawn(const char *name, void *data,
    SIMIX_process_create(name, code,
                        data,
                        gras_os_myname(), 
-                       argc, argv,
-                       /* no cleanup, thx, users will call gras_exit() */NULL);
+                       argc, argv);
 }
 
 /* **************************************************************************
index 93ddc97..a3fb795 100644 (file)
@@ -69,14 +69,12 @@ typedef struct s_smx_simdata_process *smx_simdata_process_t;
     @ingroup m_datatypes_management_details @{ */
 typedef struct s_smx_process {
 
-   /* KEEP IT IN SYNC WITH s_xbt_thread_ from src/xbt_sg_thread.h */
    char *name;                 /**< @brief process name if any */
    smx_simdata_process_t simdata;      /**< @brief simulator data */
    s_xbt_swag_hookup_t process_hookup;
    s_xbt_swag_hookup_t synchro_hookup;
    s_xbt_swag_hookup_t host_proc_hookup;
    void *data;                 /**< @brief user data */
-   /* KEEP IT IN SYNC WITH s_smx_process_ from src/xbt_sg_thread.h */
 
 } s_smx_process_t;
 /** @} */
index 5e2e97b..93cc3b7 100644 (file)
@@ -52,8 +52,8 @@ typedef void *(smx_creation_func_t)(/*name*/     const char *,
                                     /* argc */   int,
                                     /* argv */   char **);
 XBT_PUBLIC(void) SIMIX_function_register_process_create(smx_creation_func_t *function);
-
 XBT_PUBLIC(void) SIMIX_function_register_process_kill(void_f_pvoid_t *function);
+XBT_PUBLIC(void) SIMIX_function_register_process_cleanup(void_f_pvoid_t *function);
 
 /************************** Host handling ***********************************/
 
@@ -77,14 +77,12 @@ XBT_PUBLIC(int) SIMIX_host_get_state(smx_host_t host);
 /************************** Process handling *********************************/
 XBT_PUBLIC(smx_process_t) SIMIX_process_create(const char *name,
                                               xbt_main_func_t code, void *data,
-                                              const char * hostname, int argc, char **argv,
-                                              void * clean_process_function);
+                                              const char * hostname, int argc, char **argv);
 
 XBT_PUBLIC(void) SIMIX_jprocess_create(const char *name, 
                                       smx_host_t host,
                                       void *data,
                                       void *jprocess, void *jenv,
-                                      void * clean_process_function,
                                       smx_process_t* res);
 
 XBT_PUBLIC(void) SIMIX_process_kill(smx_process_t process);
index 0e539af..ed3e9d9 100644 (file)
@@ -114,7 +114,6 @@ Java_simgrid_msg_Msg_processCreate(JNIEnv* env, jclass cls, jobject jprocess_arg
                        process->simdata->m_host->simdata->s_host, 
                        /*data*/ (void*)process,
                        jprocess_arg,env,
-                       __MSG_process_cleanup,
                        &process->simdata->s_process);
   DEBUG1("context created (s_process=%p)",process->simdata->s_process);
 
index 4e05ed1..b5d903b 100644 (file)
@@ -32,7 +32,9 @@ void MSG_launch_application(const char *file)
 
   xbt_assert0(msg_global,"MSG_global_init_args has to be called before MSG_launch_application.");
        SIMIX_function_register_process_create(_MSG_process_create_from_SIMIX);
+       SIMIX_function_register_process_cleanup(__MSG_process_cleanup);
        SIMIX_function_register_process_kill(_MSG_process_kill_from_SIMIX);
+   
        SIMIX_launch_application(file);
 
        return;
index 96a8e45..baf3316 100644 (file)
@@ -107,8 +107,7 @@ m_process_t MSG_process_create_with_arguments(const char *name,
   simdata->argc = argc;
   simdata->argv = argv;
   simdata->s_process = SIMIX_process_create(name, code, 
-                                           (void*)process, host->name, argc, argv, 
-                                           __MSG_process_cleanup );
+                                           (void*)process, host->name, argc, argv);
 
   if (SIMIX_process_self()) {
     simdata->PPID = MSG_process_get_PID(SIMIX_process_self()->data);
index 2c70b1e..bafad3e 100644 (file)
@@ -40,6 +40,7 @@ typedef struct SIMIX_Global {
   xbt_dict_t registered_functions;
   smx_creation_func_t *create_process_function;
   void_f_pvoid_t* kill_process_function;
+  void_f_pvoid_t* cleanup_process_function;
 } s_SIMIX_Global_t, *SIMIX_Global_t;
 
 extern SIMIX_Global_t simix_global;
index afdc09d..055172d 100644 (file)
@@ -71,7 +71,7 @@ static void parse_process_finalize(void)
                if (simix_global->create_process_function)
                        process = simix_global->create_process_function(parse_argv[0], parse_code, NULL, parse_host,    parse_argc,parse_argv);
                else
-                       process = SIMIX_process_create(parse_argv[0], parse_code, NULL, parse_host,     parse_argc,parse_argv, NULL);
+                       process = SIMIX_process_create(parse_argv[0], parse_code, NULL, parse_host,     parse_argc,parse_argv);
 
                if(kill_time > SIMIX_get_clock()) {
                        if (simix_global->kill_process_function)
index 81f097b..b4eed5c 100644 (file)
@@ -40,6 +40,7 @@ void SIMIX_global_init(int *argc, char **argv)
 
                simix_global->create_process_function = NULL;
                simix_global->kill_process_function = NULL;
+               simix_global->cleanup_process_function = NULL;
        }
 }
 
@@ -277,7 +278,7 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
                                DEBUG2("Launching %s on %s", args->name, args->hostname);
                                process = SIMIX_process_create(args->name, args->code, 
                                                args->data, args->hostname,
-                                               args->argc,args->argv,NULL);
+                                               args->argc,args->argv);
                                if(args->kill_time > SIMIX_get_clock()) {
                                        surf_timer_resource->extension_public->set(args->kill_time, 
                                                        (void*) &SIMIX_process_kill,
@@ -358,10 +359,7 @@ void SIMIX_function_register_process_create(smx_creation_func_t* function)
 {
   xbt_assert0((simix_global->create_process_function == NULL), "Data already set");
 
-  /* Assign create process */
   simix_global->create_process_function = function;
-
-  return ;
 }
 
 /**
@@ -375,8 +373,19 @@ void SIMIX_function_register_process_kill(void_f_pvoid_t* function)
 {
   xbt_assert0((simix_global->kill_process_function == NULL), "Data already set");
 
-  /* Assign kill process */
   simix_global->kill_process_function = function;
+}
 
-  return ;
+/**
+ *     \brief Registers a function to cleanup a process.
+ *
+ *     This function registers an user function to be called when a new process ends properly.
+ *     \param function cleanup process function
+ *
+ */
+void SIMIX_function_register_process_cleanup(void_f_pvoid_t* function)
+{
+  xbt_assert0((simix_global->cleanup_process_function == NULL), "Data already set");
+
+  simix_global->cleanup_process_function = function;
 }
index 9b9fc84..915bc2b 100644 (file)
@@ -51,8 +51,7 @@ void SIMIX_process_cleanup(void *arg)
  */
 smx_process_t SIMIX_process_create(const char *name,
                                   xbt_main_func_t code, void *data,
-                                  const char * hostname, int argc, char **argv, 
-                                  void * clean_process_function)
+                                  const char * hostname, int argc, char **argv)
 {
   smx_simdata_process_t simdata = xbt_new0(s_smx_simdata_process_t,1);
   smx_process_t process = xbt_new0(s_smx_process_t,1);
@@ -67,16 +66,9 @@ smx_process_t SIMIX_process_create(const char *name,
        simdata->cond = NULL;
   simdata->argc = argc;
   simdata->argv = argv;
-       if (clean_process_function) {
-       simdata->context = xbt_context_new(code, NULL, NULL, 
-                                            clean_process_function, process, 
-                                            simdata->argc, simdata->argv);
-       }
-       else {
-       simdata->context = xbt_context_new(code, NULL, NULL, 
-                                            SIMIX_process_cleanup, process, 
-                                            simdata->argc, simdata->argv);
-       }
+  simdata->context = xbt_context_new(code, NULL, NULL, 
+                                    simix_global->cleanup_process_function, process, 
+                                    simdata->argc, simdata->argv);
 
   /* Process structure */
   process->name = xbt_strdup(name);
@@ -107,7 +99,6 @@ smx_process_t SIMIX_process_create(const char *name,
 void SIMIX_jprocess_create(const char *name, smx_host_t host,
                           void *data,
                           void *jprocess, void *jenv,
-                          void *clean_process_function,
                           smx_process_t *res)
 {
   smx_simdata_process_t simdata = xbt_new0(s_smx_simdata_process_t,1);
@@ -139,15 +130,9 @@ void SIMIX_jprocess_create(const char *name, smx_host_t host,
   simdata->argc = 0;
   simdata->argv = NULL;
   
-   if (clean_process_function) {
-      simdata->context = xbt_context_new(NULL, NULL, NULL, 
-                                        clean_process_function, process, 
-                                        /* argc/argv*/0,NULL);
-   } else {
-      simdata->context = xbt_context_new(NULL, NULL, NULL, 
-                                        SIMIX_process_cleanup, process, 
-                                        /* argc/argv*/0,NULL);
-   }
+  simdata->context = xbt_context_new(NULL, NULL, NULL, 
+                                    simix_global->cleanup_process_function, process, 
+                                    /* argc/argv*/0,NULL);
 
   /* Process structure */
   process->name = xbt_strdup(name);