Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add memset(0) for shared calloc.
[simgrid.git] / src / smpi / internals / smpi_shared.cpp
index 7ba2950..4af2c2f 100644 (file)
@@ -319,25 +319,32 @@ void* smpi_shared_malloc_intercept(size_t size, const char* file, int line)
 
 void* smpi_shared_calloc_intercept(size_t num_elm, size_t elem_size, const char* file, int line)
 {
-  if( smpi_cfg_auto_shared_malloc_thresh() == 0 || elem_size*num_elm < smpi_cfg_auto_shared_malloc_thresh()){
-    void* ptr = ::operator new(elem_size*num_elm);
+  size_t size = elem_size * num_elm;
+  if (smpi_cfg_auto_shared_malloc_thresh() == 0 || size < smpi_cfg_auto_shared_malloc_thresh()) {
+    void* ptr = ::operator new(size);
     if(not smpi_cfg_trace_call_use_absolute_path())
-      simgrid::smpi::utils::account_malloc_size(elem_size*num_elm, simgrid::xbt::Path(file).get_base_name(), line, ptr);
+      simgrid::smpi::utils::account_malloc_size(size, simgrid::xbt::Path(file).get_base_name(), line, ptr);
     else
-      simgrid::smpi::utils::account_malloc_size(elem_size*num_elm, file, line, ptr);
-    memset(ptr, 0, elem_size*num_elm);
+      simgrid::smpi::utils::account_malloc_size(size, file, line, ptr);
+    memset(ptr, 0, size);
     return ptr;
   } else {
-    simgrid::smpi::utils::account_shared_size(elem_size*num_elm);
-    return smpi_shared_malloc(elem_size*num_elm, file, line);
+    simgrid::smpi::utils::account_shared_size(size);
+    return memset(smpi_shared_malloc(size, file, line), 0, size);
   }
 }
 
-void* smpi_shared_realloc_intercept(void* /*data*/, size_t /*size*/, const char* file, int line)
+void* smpi_shared_realloc_intercept(void* data, size_t size, const char* file, int line)
 {
   // FIXME
-  XBT_ERROR("%s:%d: using realloc() with SMPI malloc interception is currently not supported", file, line);
-  xbt_die("Please recompile with -DSMPI_NO_OVERRIDE_MALLOC");
+  static bool already_warned = false;
+  if (not already_warned) {
+    XBT_WARN("%s:%d: using realloc() with SMPI malloc interception is currently not well supported. "
+             "You may want to recompile with -DSMPI_NO_OVERRIDE_MALLOC",
+             file, line);
+    already_warned = true;
+  }
+  return realloc(data, size);
 }
 
 void* smpi_shared_malloc(size_t size, const char* file, int line)