A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Bugfix: destroy all the sets when destroying a setset data structure.
[simgrid.git]
/
src
/
xbt
/
setset.c
diff --git
a/src/xbt/setset.c
b/src/xbt/setset.c
index
cbdb2b8
..
7313ff0
100644
(file)
--- a/
src/xbt/setset.c
+++ b/
src/xbt/setset.c
@@
-29,10
+29,14
@@
xbt_setset_t xbt_setset_new(unsigned int size)
*/
void xbt_setset_destroy(xbt_setset_t setset)
{
*/
void xbt_setset_destroy(xbt_setset_t setset)
{
+ xbt_fifo_item_t item;
+ xbt_setset_set_t set;
xbt_dynar_free(&setset->elm_array);
xbt_dynar_free(&setset->elm_array);
+ xbt_fifo_foreach(setset->sets, item, set, xbt_setset_set_t){
+ xbt_setset_destroy_set(set);
+ }
xbt_fifo_free(setset->sets);
xbt_free(setset);
xbt_fifo_free(setset->sets);
xbt_free(setset);
- /* FIXME: check if we should trash the stored objects */
}
/* Add an element to the setset, this will assign to it an index */
}
/* Add an element to the setset, this will assign to it an index */
@@
-44,7
+48,7
@@
xbt_setset_elm_entry_t _xbt_setset_elm_add(xbt_setset_t setset, void *obj)
xbt_setset_elm_entry_t first_elm =
(xbt_setset_elm_entry_t)xbt_dynar_get_ptr(setset->elm_array, 0);
xbt_setset_elm_entry_t first_elm =
(xbt_setset_elm_entry_t)xbt_dynar_get_ptr(setset->elm_array, 0);
- /* Before create a new elm entry check if there is one in the free elm list.*/
+ /* Before create a new elm entry check if there is one in the free elm list.
*/
/* If there is not free elm entries, then create a new one */
if(first_elm->free.next != 0){
e->ID = first_elm->free.next;
/* If there is not free elm entries, then create a new one */
if(first_elm->free.next != 0){
e->ID = first_elm->free.next;
@@
-65,13
+69,14
@@
void _xbt_setset_elm_remove(xbt_setset_t setset, unsigned long idx)
{
xbt_setset_elm_entry_t e_entry = xbt_dynar_get_ptr(setset->elm_array, idx);
xbt_setset_elm_entry_t first_free = NULL;
{
xbt_setset_elm_entry_t e_entry = xbt_dynar_get_ptr(setset->elm_array, idx);
xbt_setset_elm_entry_t first_free = NULL;
-
+
/* Decrease the refcount and proceed only if it is 0 */
if(--e_entry->info.refcount > 0)
return;
/* Erase object ID */
/* Decrease the refcount and proceed only if it is 0 */
if(--e_entry->info.refcount > 0)
return;
/* Erase object ID */
- e_entry->info.obj->ID = 0;
+ /* FIXME: do not assume that the object still exists, it might be deallocated */
+ /*e_entry->info.obj->ID = 0;*/
/* Link the elm entry to the list of free ones */
first_free = xbt_dynar_get_ptr(setset->elm_array, 0);
/* Link the elm entry to the list of free ones */
first_free = xbt_dynar_get_ptr(setset->elm_array, 0);