From cb4883c820911c89e8edc37d1076bf1c1e6f0f51 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Mon, 21 Mar 2016 23:12:43 +0100 Subject: [PATCH] plug a i-am-everywhere leak + delete pimpl_netcard when freeing a host + As the netcard of a physical host is shared by VMs running on it, it leads to double frees. + A solution is to explicity destroy the VMs when they are not needed anymore. If one doesn't like it, feel free to simplify the VM stuff ;) --- examples/java/cloud/Master.java | 1 + examples/java/cloud/energy/EnergyVMRunner.java | 2 ++ examples/msg/energy/vm/vm.c | 2 ++ src/s4u/s4u_host.cpp | 1 + 4 files changed, 6 insertions(+) diff --git a/examples/java/cloud/Master.java b/examples/java/cloud/Master.java index c1e13731d6..211b17b7dd 100644 --- a/examples/java/cloud/Master.java +++ b/examples/java/cloud/Master.java @@ -80,6 +80,7 @@ public class Master extends Process { for (int i = 0; i < vms.size(); i++) { vms.get(i).shutdown(); + vms.get(i).finalize(); } Msg.info("Master done."); } diff --git a/examples/java/cloud/energy/EnergyVMRunner.java b/examples/java/cloud/energy/EnergyVMRunner.java index 17d8e09be0..34d2cf54a2 100644 --- a/examples/java/cloud/energy/EnergyVMRunner.java +++ b/examples/java/cloud/energy/EnergyVMRunner.java @@ -67,5 +67,7 @@ public class EnergyVMRunner extends Process { vmHost1.shutdown(); vmHost3.shutdown(); + vmHost1.finalize(); + vmHost3.finalize(); } } diff --git a/examples/msg/energy/vm/vm.c b/examples/msg/energy/vm/vm.c index 96175d320c..34383f1dce 100644 --- a/examples/msg/energy/vm/vm.c +++ b/examples/msg/energy/vm/vm.c @@ -51,6 +51,8 @@ static int dvfs(int argc, char *argv[]) MSG_vm_shutdown(vm_host1); MSG_vm_shutdown(vm_host3); + MSG_vm_destroy(vm_host1); + MSG_vm_destroy(vm_host3); return 0; } diff --git a/src/s4u/s4u_host.cpp b/src/s4u/s4u_host.cpp index 892337cd67..d28b2a6743 100644 --- a/src/s4u/s4u_host.cpp +++ b/src/s4u/s4u_host.cpp @@ -43,6 +43,7 @@ Host::Host(const char* name) Host::~Host() { delete pimpl_cpu; + delete pimpl_netcard; delete mounts; } -- 2.30.2