X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2093781c3522f4122f1914486e94c1d4b8bcb3e2..a5e649421a14d09f23290b79ebe2e61066f8efde:/src/smpi/smpi_bench.c diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index 84a0bac483..089275297c 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -342,6 +342,13 @@ void smpi_sample_3(int global, const char *file, int line) } #ifndef WIN32 +static void smpi_shared_alloc_free(void *p) +{ + shared_data_t *data = p; + xbt_free(data->loc); + xbt_free(data); +} + void *smpi_shared_malloc(size_t size, const char *file, int line) { char *loc = bprintf("%zu_%s_%d", (size_t)getpid(), file, line); @@ -358,7 +365,7 @@ void *smpi_shared_malloc(size_t size, const char *file, int line) } } if (!allocs) { - allocs = xbt_dict_new_homogeneous(free); + allocs = xbt_dict_new_homogeneous(smpi_shared_alloc_free); } data = xbt_dict_get_or_null(allocs, loc); if(!data) { @@ -382,6 +389,7 @@ void *smpi_shared_malloc(size_t size, const char *file, int line) xbt_dict_set(allocs, loc, data, NULL); XBT_DEBUG("Mapping %s at %p through %d", loc, mem, fd); } else { + xbt_free(loc); mem = shm_map(data->fd, size, data); data->count++; } @@ -426,7 +434,6 @@ void smpi_shared_free(void *ptr) if (data->count <= 0) { close(data->fd); xbt_dict_remove(allocs, data->loc); - free(data->loc); XBT_DEBUG("Shared free - with removal - of %p", ptr); } }else{