A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Actually free the memory in these cases, should fix leaks and crashes on 32 bits.
[simgrid.git]
/
src
/
smpi
/
internals
/
smpi_shared.cpp
diff --git
a/src/smpi/internals/smpi_shared.cpp
b/src/smpi/internals/smpi_shared.cpp
index
2fb5a57
..
15fa823
100644
(file)
--- 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()) {
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);