From a693591c83010d4ac46672bac44f5f239039707b Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Thu, 27 Oct 2016 10:09:28 +0200 Subject: [PATCH] Destroy all hosts by the end of the simulation. This plugs huge memleaks, and make sure that the dtor of the energy plugin actually makes the expected output. --- src/simgrid/host.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/simgrid/host.cpp b/src/simgrid/host.cpp index bcd1e7683e..09bb7323e5 100644 --- a/src/simgrid/host.cpp +++ b/src/simgrid/host.cpp @@ -4,6 +4,8 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include + #include "xbt/dict.h" #include "simgrid/host.h" #include @@ -19,7 +21,23 @@ extern std::unordered_map void sg_host_exit() { - host_list.clear(); + /* copy all names to not modify the map while iterating over it. + * + * Plus, the hosts are destroyed in the lexicographic order to ensure + * that the output is reproducible: we don't want to kill them in the + * pointer order as it could be platform-dependent, which would break + * the tests. + */ + std::vector names = std::vector(); + for (auto kv : host_list) + names.push_back(kv.second->name()); + + std::sort(names.begin(), names.end()); + + for (auto name : names) + host_list.at(name)->destroy(); + + // host_list.clear(); This would be sufficient if the dict would contain smart_ptr. It's now useless } size_t sg_host_count() -- 2.20.1