return mem;
}
+
+void *smpi_shared_malloc_intercept(size_t size, const char *file, int line) {
+ if( simgrid::config::get_value<double>("smpi/auto-shared-malloc-thresh") == 0 || size < simgrid::config::get_value<double>("smpi/auto-shared-malloc-thresh"))
+ return ::operator new(size);
+ else
+ return smpi_shared_malloc(size, 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);
snprintf(loc, PTR_STRLEN, "%p", ptr);
auto meta = allocs_metadata.find(ptr);
if (meta == allocs_metadata.end()) {
- 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;
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);