From a7fe7e5468ec3397497ed36bcc6253b562c85a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Mon, 11 Jul 2016 12:37:53 +0200 Subject: [PATCH] Feature #4597: Remove VM id from VR when VM is not active (cherry picked from commit 68b6a1cb58c5aa7eccca76dd5414940780715fb7) --- src/dm/DispatchManagerActions.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/dm/DispatchManagerActions.cc b/src/dm/DispatchManagerActions.cc index c3593491c0..7d04240e85 100644 --- a/src/dm/DispatchManagerActions.cc +++ b/src/dm/DispatchManagerActions.cc @@ -230,6 +230,8 @@ void DispatchManager::free_vm_resources(VirtualMachine * vm) int uid; int gid; + int vrid = -1; + int vmid; vm->release_network_leases(); vm->release_disk_images(); @@ -240,15 +242,35 @@ void DispatchManager::free_vm_resources(VirtualMachine * vm) vm->set_state(VirtualMachine::DONE); vmpool->update(vm); + vmid = vm->get_oid(); uid = vm->get_uid(); gid = vm->get_gid(); tmpl = vm->clone_template(); + if (vm->is_vrouter()) + { + vrid = vm->get_vrouter_id(); + } + vm->unlock(); Quotas::vm_del(uid, gid, tmpl); delete tmpl; + + if (vrid != -1) + { + VirtualRouter* vr = vrouterpool->get(vrid, true); + + if (vr != 0) + { + vr->del_vmid(vmid); + + vrouterpool->update(vr); + + vr->unlock(); + } + } } /* -------------------------------------------------------------------------- */