Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Actually free the memory in these cases, should fix leaks and crashes on 32 bits.
authorAugustin Degomme <adegomme@gmail.com>
Thu, 21 Nov 2019 13:34:45 +0000 (14:34 +0100)
committerAugustin Degomme <adegomme@gmail.com>
Thu, 21 Nov 2019 13:39:30 +0000 (14:39 +0100)
src/smpi/internals/smpi_shared.cpp

index 2fb5a57..15fa823 100644 (file)
@@ -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()) {
     snprintf(loc, PTR_STRLEN, "%p", ptr);
     auto meta = allocs_metadata.find(ptr);
     if (meta == allocs_metadata.end()) {
-      if (simgrid::config::get_value<double>("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;
       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--;
     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;
         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);
   } else {
     XBT_DEBUG("Classic deallocation of %p", ptr);
     ::operator delete(ptr);