X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e84353bc7028ad5f6d6c17dbb3217e1ec24d0baf..1e129b9677a4073030b6533743c3a84056275548:/src/xbt/swag.c diff --git a/src/xbt/swag.c b/src/xbt/swag.c index 8759e67b3c..dc09977550 100644 --- a/src/xbt/swag.c +++ b/src/xbt/swag.c @@ -22,7 +22,7 @@ xbt_swag_t xbt_swag_new(size_t offset) { - xbt_swag_t swag = xbt_new0(s_xbt_swag_t,1); + xbt_swag_t swag = xbt_new0(s_xbt_swag_t, 1); swag->offset = offset; @@ -36,6 +36,10 @@ void xbt_swag_init(xbt_swag_t swag, size_t offset) void xbt_swag_insert(void *obj, xbt_swag_t swag) { + + if (xbt_swag_belongs(obj, swag)) + return; + (swag->count)++; if (swag->head == NULL) { swag->head = obj; @@ -53,9 +57,14 @@ void *xbt_swag_extract(void *obj, xbt_swag_t swag) { size_t offset = swag->offset; - if (!obj) return NULL; + if (!obj) + return NULL; + if(!xbt_swag_belongs(obj, swag)) /* Trying to remove an object that + was not in this swag */ + return NULL; + if (swag->head == swag->tail) { /* special case */ - if (swag->head != obj) /* Trying to remove an object that was not in this swag */ + if (swag->head != obj) /* Trying to remove an object that was not in this swag */ return NULL; swag->head = NULL; swag->tail = NULL; @@ -83,5 +92,6 @@ int xbt_swag_size(xbt_swag_t swag) int xbt_swag_belongs(void *obj, xbt_swag_t swag) { - return ((NEXT(obj, swag->offset)) || (PREV(obj, swag->offset)) || (swag->head==obj)); + return ((NEXT(obj, swag->offset)) || (PREV(obj, swag->offset)) + || (swag->head == obj)); }