-/* $Id$ */
-
-/* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */
+/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
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
*
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)
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);