From: Martin Quinson Date: Sun, 8 Nov 2015 20:56:20 +0000 (+0100) Subject: Don't segfault when one level of the lib has a NULL free_f X-Git-Tag: v3_13~1590 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/20d1ed5559199f337683cfc642b26130d14f394c?hp=1664069f43acb3abdb6dbcd02d024cbac957e0e6;ds=sidebyside Don't segfault when one level of the lib has a NULL free_f --- diff --git a/src/xbt/lib.c b/src/xbt/lib.c index 34fb42ea79..8c7c8270a5 100644 --- a/src/xbt/lib.c +++ b/src/xbt/lib.c @@ -33,7 +33,7 @@ void xbt_lib_free(xbt_lib_t *plib) xbt_dict_foreach (lib->dict, cursor, key, elts) { int i; for (i = 0 ; i < lib->levels ; i++) - if (elts[i]) + if (elts[i] && lib->free_f[i]) lib->free_f[i](elts[i]); } xbt_dict_free(&lib->dict); @@ -65,7 +65,8 @@ void xbt_lib_set(xbt_lib_t lib, const char *key, int level, void *obj) if (elts[level]) { XBT_DEBUG("Replace %p by %p element under key '%s:%d'", elts[level], obj, key, level); - lib->free_f[level](elts[level]); + if (lib->free_f[level]) + lib->free_f[level](elts[level]); } elts[level] = obj; } @@ -99,7 +100,7 @@ void xbt_lib_unset(xbt_lib_t lib, const char *key, int level, int invoke_callbac xbt_dict_remove(lib->dict, key); } - if (invoke_callback) + if (invoke_callback && lib->free_f[level]) lib->free_f[level](obj); }