X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e62e0fcfefb56c9029575c59857e25c5e336e37..8f29d9411160cd90ee8d2541c741daafb3f396c6:/src/smpi/internals/smpi_global.cpp diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index ce1c397f4e..ceda03f0f6 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -20,6 +20,7 @@ #include #include /* split */ #include +#include #include #include #include /* intmax_t */ @@ -634,8 +635,24 @@ void SMPI_finalize() if (smpi_cfg_privatization() == SmpiPrivStrategies::MMAP) smpi_destroy_global_memory_segments(); - if (simgrid::smpi::F2C::lookup() != nullptr) + if (simgrid::smpi::F2C::lookup() != nullptr){ + if (simgrid::smpi::F2C::lookup()->size() > simgrid::smpi::F2C::get_num_default_handles()){ + XBT_WARN("Probable Leaks in your code: SMPI detected %zu unfreed MPI handles : " + "display types and addresses (n max) with --cfg=smpi/list-leaks:n.\n" + "Running smpirun with -wrapper \"valgrind --leak-check=full\" can provide more information", + simgrid::smpi::F2C::lookup()->size() - simgrid::smpi::F2C::get_num_default_handles()); + int n = simgrid::config::get_value("smpi/list-leaks"); + if (n > 0) { + std::for_each(simgrid::smpi::F2C::lookup()->begin(), + simgrid::smpi::F2C::lookup()->end(), + [n](const std::pair &p) { + if(p.first >= simgrid::smpi::F2C::get_num_default_handles() && p.first < simgrid::smpi::F2C::get_num_default_handles() + n) + XBT_WARN ("Leak %p of type %s", p.second, boost::core::demangle(typeid(*(p.second)).name()).c_str() ); + }); + } + } simgrid::smpi::F2C::delete_lookup(); + } } void smpi_mpi_init() {