From: Augustin Degomme Date: Thu, 21 Nov 2019 13:34:45 +0000 (+0100) Subject: Actually free the memory in these cases, should fix leaks and crashes on 32 bits. X-Git-Tag: v3.25~375^2~3 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/5a139b759589dafd3aa6c4b282340ad78bf55753 Actually free the memory in these cases, should fix leaks and crashes on 32 bits. --- diff --git a/src/smpi/internals/smpi_shared.cpp b/src/smpi/internals/smpi_shared.cpp index 2fb5a572cf..15fa823d67 100644 --- a/src/smpi/internals/smpi_shared.cpp +++ b/src/smpi/internals/smpi_shared.cpp @@ -435,10 +435,7 @@ void smpi_shared_free(void *ptr) snprintf(loc, PTR_STRLEN, "%p", ptr); auto meta = allocs_metadata.find(ptr); if (meta == allocs_metadata.end()) { - if (simgrid::config::get_value("smpi/auto_shared_malloc_thresh") > 0)//this free belongs to a malloc under the threshold. - ::operator delete(ptr); - else - XBT_WARN("Cannot free: %p was not shared-allocated by SMPI - maybe its size was 0?", ptr); + ::operator delete(ptr); return; } shared_data_t* data = &meta->second.data->second; @@ -459,11 +456,17 @@ void smpi_shared_free(void *ptr) auto meta = allocs_metadata.find(ptr); if (meta != allocs_metadata.end()){ meta->second.data->second.count--; - if(meta->second.data->second.count==0) + if(meta->second.data->second.count==0){ delete meta->second.data; + allocs_metadata.erase(ptr); + } + XBT_DEBUG("Shared free - Global - of %p", ptr); + munmap(ptr, meta->second.size); + }else{ + ::operator delete(ptr); + return; } - XBT_DEBUG("Shared free - Global - of %p", ptr); - munmap(ptr, meta->second.size); + } else { XBT_DEBUG("Classic deallocation of %p", ptr); ::operator delete(ptr);