Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[surf] Rename callback registration functions
[simgrid.git] / src / simix / smx_global.c
index 677f9d5..b37a920 100644 (file)
@@ -21,6 +21,8 @@
 #include "src/mc/mc_replay.h"
 #include "simgrid/sg_config.h"
 
+#include "src/surf/callbacks.h"
+
 #ifdef HAVE_MC
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_protocol.h"
@@ -45,6 +47,13 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
 smx_global_t simix_global = NULL;
 static xbt_heap_t simix_timers = NULL;
 
+/** @brief Timer datatype */
+typedef struct s_smx_timer {
+  double date;
+  void(* func)(void*);
+  void* args;
+} s_smx_timer_t;
+
 static void* SIMIX_synchro_mallocator_new_f(void);
 static void SIMIX_synchro_mallocator_free_f(void* synchro);
 static void SIMIX_synchro_mallocator_reset_f(void* synchro);
@@ -145,6 +154,17 @@ XBT_INLINE double SIMIX_timer_next(void)
   return xbt_heap_size(simix_timers) > 0 ? xbt_heap_maxkey(simix_timers) : -1.0;
 }
 
+static void kill_process(smx_process_t process)
+{
+  SIMIX_process_kill(process, NULL);
+}
+
+static void SIMIX_storage_create_(smx_storage_t storage)
+{
+  const char* key = xbt_dict_get_elm_key(storage);
+  SIMIX_storage_create(key, storage, NULL);
+}
+
 /**
  * \ingroup SIMIX_API
  * \brief Initialize SIMIX internal data.
@@ -179,7 +199,7 @@ void SIMIX_global_init(int *argc, char **argv)
     simix_global->registered_functions = xbt_dict_new_homogeneous(NULL);
 
     simix_global->create_process_function = SIMIX_process_create;
-    simix_global->kill_process_function = SIMIX_process_kill;
+    simix_global->kill_process_function = kill_process;
     simix_global->cleanup_process_function = SIMIX_process_cleanup;
     simix_global->synchro_mallocator = xbt_mallocator_new(65536,
         SIMIX_synchro_mallocator_new_f, SIMIX_synchro_mallocator_free_f,
@@ -207,6 +227,8 @@ void SIMIX_global_init(int *argc, char **argv)
     /* register a function to be called by SURF after the environment creation */
     sg_platf_init();
     sg_platf_postparse_add_cb(SIMIX_post_create_environment);
+    surf_on_host_created(SIMIX_host_create);
+    surf_on_storage_created(SIMIX_storage_create_);
 
   }
   if (!simix_timers) {
@@ -466,7 +488,7 @@ void SIMIX_run(void)
        // (i.e. provide dispatchers that read and expand the args)
        timer = xbt_heap_pop(simix_timers);
        if (timer->func)
-         ((void (*)(void*))timer->func)(timer->args);
+         timer->func(timer->args);
        xbt_free(timer);
     }
 
@@ -524,7 +546,7 @@ void SIMIX_run(void)
  *   \param arg Parameters of the function
  *
  */
-XBT_INLINE smx_timer_t SIMIX_timer_set(double date, void *function, void *arg)
+XBT_INLINE smx_timer_t SIMIX_timer_set(double date, void (*function)(void*), void *arg)
 {
   smx_timer_t timer = xbt_new0(s_smx_timer_t, 1);
 
@@ -566,7 +588,7 @@ XBT_INLINE void SIMIX_function_register_process_create(smx_creation_func_t
  *
  * \param function Kill process function
  */
-XBT_INLINE void SIMIX_function_register_process_kill(void_pfn_smxprocess_t_smxprocess_t
+XBT_INLINE void SIMIX_function_register_process_kill(void_pfn_smxprocess_t
                                                      function)
 {
   simix_global->kill_process_function = function;