X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6760cb07d6b57be16928d95339d71e57c4e24f36..2910fcae936946944e9b4fbc74c77767e7d5c9bd:/src/xbt/fifo.c diff --git a/src/xbt/fifo.c b/src/xbt/fifo.c index 4eb49ddc9d..c3d4ffb905 100644 --- a/src/xbt/fifo.c +++ b/src/xbt/fifo.c @@ -26,15 +26,10 @@ xbt_fifo_t xbt_fifo_new(void) xbt_fifo_t fifo; fifo = xbt_new0(struct xbt_fifo, 1); - if (item_mallocator == NULL) { - item_mallocator = xbt_mallocator_new(256, - fifo_item_mallocator_new_f, - fifo_item_mallocator_free_f, - fifo_item_mallocator_reset_f); - } return fifo; } + /** Destructor * \param l poor victim * @@ -455,6 +450,15 @@ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_first_item(xbt_fifo_t l) return l->head; } +/** + * \param l a list + * \return the tail of \a l. + */ +XBT_INLINE xbt_fifo_item_t xbt_fifo_get_last_item(xbt_fifo_t l) +{ + return l->tail; +} + /** \deprecated Use #xbt_fifo_get_first_item instead. */ XBT_INLINE xbt_fifo_item_t xbt_fifo_getFirstItem(xbt_fifo_t l) @@ -501,11 +505,24 @@ xbt_fifo_item_t xbt_fifo_getPrevItem(xbt_fifo_item_t i) return xbt_fifo_get_prev_item(i); } -/** - * Destroy the fifo item mallocator. - * This is an internal XBT function called by xbt_exit(). +/* Module init/exit handling the fifo item mallocator + * These are internal XBT functions called by xbt_preinit/postexit(). + * It can be used several times to recreate the mallocator, for example when you switch to MC mode */ -void xbt_fifo_exit(void) +void xbt_fifo_preinit(void) +{ + if (item_mallocator != NULL) { + /* Already created. I guess we want to switch to MC mode, so kill the previously created mallocator */ + xbt_mallocator_free(item_mallocator); + } + + item_mallocator = xbt_mallocator_new(256, + fifo_item_mallocator_new_f, + fifo_item_mallocator_free_f, + fifo_item_mallocator_reset_f); +} + +void xbt_fifo_postexit(void) { if (item_mallocator != NULL) { xbt_mallocator_free(item_mallocator);