X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e99350b90a8c0e400db2f43e3093b70afdbd2aac..f4206a23cb0e9c218713ca1a0c980b9c65ff4710:/src/surf/surf_action.c diff --git a/src/surf/surf_action.c b/src/surf/surf_action.c index fc5b8d9363..0622378741 100644 --- a/src/surf/surf_action.c +++ b/src/surf/surf_action.c @@ -27,7 +27,7 @@ const char *surf_action_state_names[6] = { static xbt_mallocator_t action_mallocator = NULL; static int action_mallocator_allocated_size = 0; static void* surf_action_mallocator_new_f(void); -static void surf_action_mallocator_free_f(void* action); +#define surf_action_mallocator_free_f xbt_free_f static void surf_action_mallocator_reset_f(void* action); /** @@ -55,10 +55,6 @@ static void* surf_action_mallocator_new_f(void) { return xbt_malloc(action_mallocator_allocated_size); } -static void surf_action_mallocator_free_f(void* action) { - xbt_free(action); -} - static void surf_action_mallocator_reset_f(void* action) { memset(action, 0, action_mallocator_allocated_size); } @@ -66,7 +62,7 @@ static void surf_action_mallocator_reset_f(void* action) { 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); + } +}