X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1ba8f57603958e2daa9d9ce4326b3eeeb424f83a..b5d888de40aaeeec3757922455f920b5333dbc6e:/src/surf/surf_action.c diff --git a/src/surf/surf_action.c b/src/surf/surf_action.c index 175fe69c7f..0622378741 100644 --- a/src/surf/surf_action.c +++ b/src/surf/surf_action.c @@ -26,9 +26,9 @@ const char *surf_action_state_names[6] = { /* Surf actions mallocator */ static xbt_mallocator_t action_mallocator = NULL; static int action_mallocator_allocated_size = 0; -static void* action_mallocator_new_f(void); -static void action_mallocator_free_f(void* action); -static void action_mallocator_reset_f(void* action); +static void* surf_action_mallocator_new_f(void); +#define surf_action_mallocator_free_f xbt_free_f +static void surf_action_mallocator_reset_f(void* action); /** * \brief Initializes the action module of Surf. @@ -39,8 +39,8 @@ void surf_action_init(void) { * so this size should be set to the maximum size of the surf action structures */ action_mallocator_allocated_size = sizeof(s_surf_action_network_CM02_t); - action_mallocator = xbt_mallocator_new(128, action_mallocator_new_f, - action_mallocator_free_f, action_mallocator_reset_f); + action_mallocator = xbt_mallocator_new(65536, surf_action_mallocator_new_f, + surf_action_mallocator_free_f, surf_action_mallocator_reset_f); } /** @@ -51,22 +51,18 @@ void surf_action_exit(void) { xbt_mallocator_free(action_mallocator); } -static void* action_mallocator_new_f(void) { - return xbt_malloc0(action_mallocator_allocated_size); +static void* surf_action_mallocator_new_f(void) { + return xbt_malloc(action_mallocator_allocated_size); } -static void action_mallocator_free_f(void* action) { - xbt_free(action); -} - -static void action_mallocator_reset_f(void* action) { +static void surf_action_mallocator_reset_f(void* action) { memset(action, 0, action_mallocator_allocated_size); } void *surf_action_new(size_t size, double cost, surf_model_t model, int failed) { - xbt_assert2(size <= action_mallocator_allocated_size, + xbt_assert(size <= action_mallocator_allocated_size, "Cannot create a surf action of size %zu: the mallocator only provides actions of size %d", size, action_mallocator_allocated_size); @@ -129,7 +125,7 @@ void surf_action_state_set(surf_action_t action, e_surf_action_state_t state) { surf_action_state_t action_state = &(action->model_type->states); - XBT_IN2("(%p,%s)", action, surf_action_state_names[state]); + XBT_IN("(%p,%s)", action, surf_action_state_names[state]); xbt_swag_remove(action, action->state_set); if (state == SURF_ACTION_READY) @@ -145,7 +141,7 @@ void surf_action_state_set(surf_action_t action, if (action->state_set) xbt_swag_insert(action, action->state_set); - XBT_OUT; + XBT_OUT(); } void surf_action_data_set(surf_action_t action, void *data) @@ -158,12 +154,33 @@ XBT_INLINE void surf_action_ref(surf_action_t action) action->refcount++; } -/* -void surf_action_suspend(surf_action_t action) -{ - action->suspended = 1; -}*/ - /* * Maxmin action */ + +/* added to manage the communication action's heap */ +void surf_action_lmm_update_index_heap(void *action, int i) { + surf_action_lmm_t a = action; + a->index_heap = i; +} +/* insert action on heap using a given key and a hat (heap_action_type) + * a hat can be of three types for communications: + * + * NORMAL = this is a normal heap entry stating the date to finish transmitting + * LATENCY = this is a heap entry to warn us when the latency is payed + * MAX_DURATION =this is a heap entry to warn us when the max_duration limit is reached + */ +void surf_action_lmm_heap_insert(xbt_heap_t heap, surf_action_lmm_t action, double key, + enum heap_action_type hat) +{ + action->hat = hat; + xbt_heap_push(heap, action, key); +} + +void surf_action_lmm_heap_remove(xbt_heap_t heap, surf_action_lmm_t action) +{ + action->hat = NOTSET; + if (action->index_heap >= 0) { + xbt_heap_remove(heap, action->index_heap); + } +}