X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/20c4a4134847860ac7093fa36623e47b35888558..7ad85b03568dabade546f7948aaf7279059e9269:/src/simix/smx_global.c diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index 0404d17deb..b37a920044 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -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) { @@ -433,7 +455,7 @@ void SIMIX_run(void) } } /* Wake up all processes waiting for a Surf action to finish */ - xbt_dynar_foreach(model_list, iter, model) { + xbt_dynar_foreach(all_existing_models, iter, model) { XBT_DEBUG("Handling process whose action failed"); while ((action = surf_model_extract_failed_action_set(model))) { XBT_DEBUG(" Handling Action %p",action); @@ -466,12 +488,12 @@ 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); } /* Wake up all processes waiting for a Surf action to finish */ - xbt_dynar_foreach(model_list, iter, model) { + xbt_dynar_foreach(all_existing_models, iter, model) { XBT_DEBUG("Handling process whose action failed"); while ((action = surf_model_extract_failed_action_set(model))) { XBT_DEBUG(" Handling Action %p",action); @@ -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;