From ea9b2342bb9f9c33fe322dd9eac17e885a71121f Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Mon, 24 Aug 2015 17:27:53 +0200 Subject: [PATCH] Bug #3876: Adjust locking order in vm and host --- src/dm/DispatchManagerActions.cc | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/dm/DispatchManagerActions.cc b/src/dm/DispatchManagerActions.cc index 9945e3256b..3888de3787 100644 --- a/src/dm/DispatchManagerActions.cc +++ b/src/dm/DispatchManagerActions.cc @@ -773,21 +773,31 @@ int DispatchManager::finalize( VirtualMachine::VmState state; bool is_public_host = false; + int host_id = -1; - vm = vmpool->get(vid,true); - - if(vm->hasHistory()) - { - host = hpool->get(vm->get_hid(),true); - is_public_host = host->is_public_cloud(); - host->unlock(); - } + vm = vmpool->get(vid,true); if ( vm == 0 ) { return -1; } + if(vm->hasHistory()) + { + host_id = vm->get_hid(); + } + + vm->unlock(); + + if(host_id != -1) + { + host = hpool->get(host_id,true); + is_public_host = host->is_public_cloud(); + host->unlock(); + } + + vm = vmpool->get(vid,true); + state = vm->get_state(); oss << "Finalizing VM " << vid;