Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix use after delete.
authorAugustin Degomme <adegomme@gmail.com>
Fri, 22 Nov 2019 11:07:18 +0000 (12:07 +0100)
committerAugustin Degomme <adegomme@gmail.com>
Fri, 22 Nov 2019 11:07:29 +0000 (12:07 +0100)
src/smpi/internals/smpi_shared.cpp

index 15fa823..9f9d03b 100644 (file)
@@ -350,6 +350,13 @@ void *smpi_shared_malloc_intercept(size_t size, const char *file, int line) {
     return smpi_shared_malloc(size, file, line);
 }
 
+void* smpi_shared_calloc_intercept(size_t num_elm, size_t elem_size, const char* file, int line){
+  if( simgrid::config::get_value<double>("smpi/auto-shared-malloc-thresh") == 0 || elem_size*num_elm < simgrid::config::get_value<double>("smpi/auto-shared-malloc-thresh"))
+    return ::operator new(elem_size*num_elm);
+  else
+    return smpi_shared_malloc(elem_size*num_elm, file, line);
+}
+
 void *smpi_shared_malloc(size_t size, const char *file, int line) {
   if (size > 0 && smpi_cfg_shared_malloc == SharedMallocType::LOCAL) {
     return smpi_shared_malloc_local(size, file, line);
@@ -456,12 +463,12 @@ void smpi_shared_free(void *ptr)
     auto meta = allocs_metadata.find(ptr);
     if (meta != allocs_metadata.end()){
       meta->second.data->second.count--;
+      XBT_DEBUG("Shared free - Global - of %p", ptr);
+      munmap(ptr, meta->second.size);
       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;