X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/997eaf52ad0ae1eb34820b135c7ba884b2a17f3c..095385fdf56aeed6b238819f61abbd083b8e48a0:/src/xbt/dynar.c diff --git a/src/xbt/dynar.c b/src/xbt/dynar.c index c16e2458bb..7ac54ddc45 100644 --- a/src/xbt/dynar.c +++ b/src/xbt/dynar.c @@ -228,18 +228,11 @@ xbt_dynar_new_sync(const unsigned long elmsize, void xbt_dynar_free_container(xbt_dynar_t * dynar) { if (dynar && *dynar) { - - if ((*dynar)->data) { - _xbt_clear_mem((*dynar)->data, (*dynar)->size); - free((*dynar)->data); - } - - if ((*dynar)->mutex) - xbt_mutex_destroy((*dynar)->mutex); - - _xbt_clear_mem(*dynar, sizeof(s_xbt_dynar_t)); - - free(*dynar); + xbt_dynar_t d = *dynar; + free(d->data); + if (d->mutex) + xbt_mutex_destroy(d->mutex); + free(d); *dynar = NULL; } } @@ -389,18 +382,16 @@ XBT_INLINE void *xbt_dynar_set_at_ptr(const xbt_dynar_t dynar, _dynar_lock(dynar); _sanity_check_dynar(dynar); - _xbt_dynar_expand(dynar, idx + 1); - if (idx >= dynar->used) { + _xbt_dynar_expand(dynar, idx + 1); _xbt_clear_mem(((char * const)dynar->data) + dynar->used * dynar->elmsize, (idx + 1 - dynar->used)*dynar->elmsize); dynar->used = idx + 1; } - - _dynar_unlock(dynar); - res = _xbt_dynar_elm(dynar, idx); + _dynar_unlock(dynar); + return res; } @@ -411,9 +402,8 @@ _xbt_dynar_set(xbt_dynar_t dynar, _sanity_check_dynar(dynar); - _xbt_dynar_expand(dynar, idx + 1); - if (idx >= dynar->used) { + _xbt_dynar_expand(dynar, idx + 1); _xbt_clear_mem(((char * const)dynar->data) + dynar->used * dynar->elmsize, (idx + 1 - dynar->used)*dynar->elmsize); dynar->used = idx + 1;