XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
"Logging specific to SIMIX (kernel)");
-SIMIX_Global_t simix_global = NULL;
+smx_global_t simix_global = NULL;
static xbt_heap_t simix_timers = NULL;
/* FIXME: Yeah, I'll do it in a portable maner one day [Mt] */
/********************************* SIMIX **************************************/
+XBT_INLINE double SIMIX_timer_next(void)
+{
+ return xbt_heap_size(simix_timers) > 0 ? xbt_heap_maxkey(simix_timers) : -1.0;
+}
+
/**
* \brief Initialize SIMIX internal data.
*
XBT_LOG_CONNECT(simix_synchro, simix);
XBT_LOG_CONNECT(simix_context, simix);
- simix_global = xbt_new0(s_SIMIX_Global_t, 1);
+ simix_global = xbt_new0(s_smx_global_t, 1);
simix_global->host = xbt_dict_new();
simix_global->process_to_run =
simix_global->process_to_destroy =
xbt_swag_new(xbt_swag_offset(proc, destroy_hookup));
- simix_global->current_process = NULL;
simix_global->maestro_process = NULL;
simix_global->registered_functions = xbt_dict_new();
/* Initialize the SIMIX network module */
SIMIX_network_init();
-
+
/* Prepare to display some more info when dying on Ctrl-C pressing */
signal(SIGINT, inthandler);
surf_init(argc, argv); /* Initialize SURF structures */
/* Exit the SIMIX network module */
SIMIX_network_exit();
-
+
/* Exit request mechanism */
SIMIX_request_destroy();
-
+
xbt_heap_free(simix_timers);
/* Free the remaining data structures */
xbt_swag_free(simix_global->process_to_run);
smx_timer_t timer;
surf_model_t model;
unsigned int iter;
-
+
do {
do {
DEBUG0("New Schedule Round");
SIMIX_context_runall(simix_global->process_to_run);
- while((req = SIMIX_request_pop())){
+ while ((req = SIMIX_request_pop())) {
DEBUG1("Handling request %p", req);
SIMIX_request_pre(req);
}
/* Notify all the hosts that have failed */
/* FIXME: iterate through the list of failed host and mark each of them */
/* as failed. On each host, signal all the running processes with host_fail */
-
+
/* Handle any pending timer */
while (xbt_heap_size(simix_timers) > 0 && SIMIX_get_clock() >= SIMIX_timer_next()) {
//FIXME: make the timers being real callbacks
}
/* Wake up all process waiting for the action finish */
xbt_dynar_foreach(model_list, iter, model) {
- for(set = model->states.failed_action_set;
- set;
- set = (set == model->states.failed_action_set)
- ? model->states.done_action_set
- : NULL) {
+ for (set = model->states.failed_action_set;
+ set;
+ set = (set == model->states.failed_action_set)
+ ? model->states.done_action_set
+ : NULL) {
while ((action = xbt_swag_extract(set)))
- SIMIX_request_post((smx_action_t)action->data);
+ SIMIX_request_post((smx_action_t) action->data);
}
}
- } while(time != -1.0);
+ } while (time != -1.0);
}
xbt_heap_push(simix_timers, timer, date);
}
-XBT_INLINE double SIMIX_timer_next(void)
-{
- return xbt_heap_size(simix_timers) > 0 ? xbt_heap_maxkey(simix_timers) : -1.0;
-}
-
/**
* \brief Registers a function to create a process.
*