From 5198991bb329c947bd497b66b2d837959ce20ee6 Mon Sep 17 00:00:00 2001 From: Christian Heinrich Date: Wed, 14 Feb 2018 11:35:08 +0100 Subject: [PATCH 1/1] [DVFS] Clean up the mess I made before; move to unique_ptr --- src/surf/plugins/host_dvfs.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/surf/plugins/host_dvfs.cpp b/src/surf/plugins/host_dvfs.cpp index 7df4784c25..7ffaa7ca32 100644 --- a/src/surf/plugins/host_dvfs.cpp +++ b/src/surf/plugins/host_dvfs.cpp @@ -186,20 +186,26 @@ static void on_host_added(simgrid::s4u::Host& host) boost::algorithm::to_lower(dvfs_governor); } - // FIXME This is really ugly. When do we free the governor? Actually, never, because - // daemons never stop to run - they will be killed when the simulation is over. :( - simgrid::plugin::dvfs::Governor* governor; - if (dvfs_governor == "conservative") { - governor = new simgrid::plugin::dvfs::Conservative(daemonProc->getHost()); - } else if (dvfs_governor == "ondemand") { - governor = new simgrid::plugin::dvfs::OnDemand(daemonProc->getHost()); - } else if (dvfs_governor == "performance") { - governor = new simgrid::plugin::dvfs::Performance(daemonProc->getHost()); - } else if (dvfs_governor == "powersave") { - governor = new simgrid::plugin::dvfs::Powersave(daemonProc->getHost()); - } else { - XBT_CRITICAL("No governor specified for host %s", daemonProc->getHost()->getCname()); - } + auto governor = [&dvfs_governor, &daemonProc]() { + if (dvfs_governor == "conservative") { + return std::unique_ptr( + new simgrid::plugin::dvfs::Conservative(daemonProc->getHost())); + } else if (dvfs_governor == "ondemand") { + return std::unique_ptr( + new simgrid::plugin::dvfs::OnDemand(daemonProc->getHost())); + } else if (dvfs_governor == "performance") { + return std::unique_ptr( + new simgrid::plugin::dvfs::Performance(daemonProc->getHost())); + } else if (dvfs_governor == "powersave") { + return std::unique_ptr( + new simgrid::plugin::dvfs::Powersave(daemonProc->getHost())); + } else { + XBT_CRITICAL("No governor specified for host %s, falling back to Performance", + daemonProc->getHost()->getCname()); + return std::unique_ptr( + new simgrid::plugin::dvfs::Performance(daemonProc->getHost())); + } + }(); while (1) { // Sleep *before* updating; important for startup (i.e., t = 0). -- 2.20.1