From 91f0f8acd7bb93039252812ab45521b948ff50f4 Mon Sep 17 00:00:00 2001 From: alegrand Date: Sat, 20 Nov 2004 00:11:47 +0000 Subject: [PATCH 1/1] Bug fix and add a xbt_swag_foreach_safe where you can remove objects from the swag while going through it. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@520 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- include/xbt/swag.h | 9 +++++++++ src/xbt/swag.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/xbt/swag.h b/include/xbt/swag.h index d4533a0684..5af75a74e6 100644 --- a/include/xbt/swag.h +++ b/include/xbt/swag.h @@ -46,3 +46,12 @@ static __inline__ void *xbt_swag_getFirst(xbt_swag_t swag) for((obj)=xbt_swag_getFirst((swag)); \ (obj)!=NULL; \ (obj)=xbt_swag_getNext((obj),(swag)->offset)) + +#define xbt_swag_foreach_safe(obj,obj_next,swag) \ + for((obj)=xbt_swag_getFirst((swag)), \ + ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \ + (obj_next=NULL)); \ + (obj)!=NULL; \ + (obj)=obj_next, \ + ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \ + (obj_next=NULL)) ) diff --git a/src/xbt/swag.c b/src/xbt/swag.c index dc09977550..42e70fd10d 100644 --- a/src/xbt/swag.c +++ b/src/xbt/swag.c @@ -57,7 +57,7 @@ void *xbt_swag_extract(void *obj, xbt_swag_t swag) { size_t offset = swag->offset; - if (!obj) + if ((!obj) || (!swag)) return NULL; if(!xbt_swag_belongs(obj, swag)) /* Trying to remove an object that was not in this swag */ -- 2.20.1