smx_global_t simix_global = NULL;
static xbt_heap_t simix_timers = NULL;
+static void* SIMIX_action_mallocator_new_f(void);
+static void SIMIX_action_mallocator_free_f(void* action);
+static void SIMIX_action_mallocator_reset_f(void* action);
+
/* FIXME: Yeah, I'll do it in a portable maner one day [Mt] */
#include <signal.h>
simix_global->create_process_function = NULL;
simix_global->kill_process_function = NULL;
simix_global->cleanup_process_function = SIMIX_process_cleanup;
+ simix_global->action_mallocator = xbt_mallocator_new(65536,
+ SIMIX_action_mallocator_new_f, SIMIX_action_mallocator_free_f,
+ SIMIX_action_mallocator_reset_f);
surf_init(argc, argv); /* Initialize SURF structures */
SIMIX_context_mod_init();
}
}
}
+
+static void* SIMIX_action_mallocator_new_f(void) {
+ smx_action_t action = xbt_new(s_smx_action_t, 1);
+ action->request_list = xbt_fifo_new();
+ return action;
+}
+
+static void SIMIX_action_mallocator_free_f(void* action) {
+ xbt_fifo_free(((smx_action_t) action)->request_list);
+ xbt_free(action);
+}
+
+static void SIMIX_action_mallocator_reset_f(void* action) {
+
+ // we also recycle the request list
+ xbt_fifo_t fifo = ((smx_action_t) action)->request_list;
+ xbt_fifo_reset(fifo);
+ memset(action, 0, sizeof(s_smx_action_t));
+ ((smx_action_t) action)->request_list = fifo;
+}