From: mquinson Date: Sun, 7 Aug 2005 11:04:24 +0000 (+0000) Subject: Make sure the lens dynar always gets cleaned, even on exception X-Git-Tag: v3.3~3762 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/149933f19168c87b400c0e0e5583fbcef0859ce8 Make sure the lens dynar always gets cleaned, even on exception git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1594 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/xbt/dict_multi.c b/src/xbt/dict_multi.c index 7b85efa9e5..6db40206ca 100644 --- a/src/xbt/dict_multi.c +++ b/src/xbt/dict_multi.c @@ -88,6 +88,7 @@ xbt_multidict_set(xbt_dict_t mdict, void *data, void_f_pvoid_t *free_ctn) { xbt_dynar_t lens = xbt_dynar_new(sizeof(unsigned long int),NULL); int i; + xbt_ex_t e; for (i = 0; i < xbt_dynar_length(keys); i++) { char *thiskey = xbt_dynar_get_as(keys, i, char*); @@ -96,9 +97,13 @@ xbt_multidict_set(xbt_dict_t mdict, xbt_dynar_push(lens,&thislen); } - xbt_multidict_set_ext(mdict, keys, lens, data, free_ctn); - xbt_dynar_free(&lens); - + TRY { + xbt_multidict_set_ext(mdict, keys, lens, data, free_ctn); + } CLEANUP { + xbt_dynar_free(&lens); + } CATCH(e) { + RETHROW; + } } /** \brief Insert \e data under all the keys contained in \e keys, providing their sizes in \e lens.