diff --git a/gns3server/modules/virtualbox/__init__.py b/gns3server/modules/virtualbox/__init__.py index 04df958f..24f2f684 100644 --- a/gns3server/modules/virtualbox/__init__.py +++ b/gns3server/modules/virtualbox/__init__.py @@ -110,7 +110,6 @@ class VirtualBox(BaseManager): raise VirtualBoxError("VBoxManage has timed out after {} seconds!".format(timeout)) if process.returncode: - # only the first line of the output is useful vboxmanage_error = stderr_data.decode("utf-8", errors="ignore") raise VirtualBoxError("VirtualBox has returned an error: {}".format(vboxmanage_error)) diff --git a/gns3server/modules/virtualbox/virtualbox_vm.py b/gns3server/modules/virtualbox/virtualbox_vm.py index ed1580ab..e0a181be 100644 --- a/gns3server/modules/virtualbox/virtualbox_vm.py +++ b/gns3server/modules/virtualbox/virtualbox_vm.py @@ -321,6 +321,7 @@ class VirtualBoxVM(BaseVM): if self._linked_clone: hdd_table = [] + hdd_files_to_close = [] if os.path.exists(self.working_dir): hdd_files = yield from self._get_all_hdd_files() vm_info = yield from self._get_vm_info() @@ -331,6 +332,7 @@ class VirtualBoxVM(BaseVM): port = match.group(2) device = match.group(3) if value in hdd_files: + hdd_files_to_close.append(value) log.info("VirtualBox VM '{name}' [{id}] detaching HDD {controller} {port} {device}".format(name=self.name, id=self.id, controller=controller, @@ -351,6 +353,12 @@ class VirtualBoxVM(BaseVM): log.info("VirtualBox VM '{name}' [{id}] unregistering".format(name=self.name, id=self.id)) yield from self.manager.execute("unregistervm", [self._name]) + for hdd_file in hdd_files_to_close: + log.info("VirtualBox VM '{name}' [{id}] closing disk {disk}".format(name=self.name, + id=self.id, + disk=os.path.basename(hdd_file))) + yield from self.manager.execute("closemedium", ["disk", hdd_file]) + if hdd_table: try: hdd_info_file = os.path.join(self.working_dir, self._vmname, "hdd_info.json")