X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/827f345d26da926941909a521752839e21e9a44e..7eb05b56d98d3527843b2ceccf4fb26ffab538f9:/src/simgrid/host.cpp diff --git a/src/simgrid/host.cpp b/src/simgrid/host.cpp index bcd1e7683e..90034b03f0 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 @@ -14,12 +16,28 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sg_host, sd, "Logging specific to sg_hosts"); -extern std::unordered_map +extern std::unordered_map host_list; // FIXME: don't dupplicate the content of s4u::Host this way 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()