Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
implement gras_agent_spawn in RL, kill the data argument out of it
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 24 Nov 2010 16:19:00 +0000 (16:19 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 24 Nov 2010 16:19:00 +0000 (16:19 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8642 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/gras/process.h
src/gras/Virtu/rl_process.c
src/gras/Virtu/sg_process.c

index a91114a..cfc5fba 100644 (file)
@@ -14,7 +14,7 @@
 
 SG_BEGIN_DECL()
 
-void gras_agent_spawn(const char *name, void *data, xbt_main_func_t code,
+void gras_agent_spawn(const char *name, xbt_main_func_t code,
                       int argc, char *argv[], xbt_dict_t properties);
 
 
index e6a6672..969f97a 100644 (file)
@@ -9,6 +9,7 @@
 #include "gras_modinter.h"      /* module initialization interface */
 #include "gras/Virtu/virtu_rl.h"
 #include "portable.h"
+#include "xbt/xbt_os_thread.h"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(gras_virtu_process);
 
@@ -93,11 +94,28 @@ gras_procdata_t *gras_procdata_get(void)
   return _gras_procdata;
 }
 
-void gras_agent_spawn(const char *name, void *data,
+typedef struct {
+  xbt_main_func_t code;
+  int argc;
+  char **argv;
+} spawner_wrapper_args;
+
+static void *spawner_wrapper(void *data) {
+  spawner_wrapper_args *a = data;
+  (*(a->code))(a->argc,a->argv);
+  free(a);
+  return NULL;
+}
+
+void gras_agent_spawn(const char *name,
                       xbt_main_func_t code, int argc, char *argv[],
                       xbt_dict_t properties)
 {
-  THROW_UNIMPLEMENTED;
+  spawner_wrapper_args *args =malloc(sizeof(spawner_wrapper_args));
+  args->argc=argc;
+  args->argv=argv;
+  args->code=code;
+  xbt_os_thread_create(name,spawner_wrapper,args);
 }
 
 /* **************************************************************************
index 743734c..2e2ed98 100644 (file)
@@ -22,13 +22,13 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(gras_virtu_process);
 static long int PID = 1;
 
 
-void gras_agent_spawn(const char *name, void *data,
+void gras_agent_spawn(const char *name,
                       xbt_main_func_t code, int argc, char *argv[],
                       xbt_dict_t properties)
 {
 
-  SIMIX_process_create(name, code,
-                       data, gras_os_myname(), argc, argv, properties);
+  SIMIX_process_create(name, code, NULL,
+                       gras_os_myname(), argc, argv, properties);
 }
 
 /* **************************************************************************