From 5e7f97b175d6beeb822b36a0cca50dba93208501 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Fri, 3 Mar 2017 18:40:26 +0100 Subject: [PATCH] Fix when qemu exit by itself clean other processes Fix https://github.com/GNS3/gns3-gui/issues/1898 --- gns3server/compute/base_node.py | 2 +- gns3server/compute/qemu/qemu_vm.py | 5 ++--- tests/compute/qemu/test_qemu_vm.py | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gns3server/compute/base_node.py b/gns3server/compute/base_node.py index 1f8cdc18..b728401b 100644 --- a/gns3server/compute/base_node.py +++ b/gns3server/compute/base_node.py @@ -533,7 +533,7 @@ class BaseNode: server_config = self._manager.config.get_section_config("Server") server_host = server_config.get("host") - if not self._ubridge_hypervisor: + if not self.ubridge: self._ubridge_hypervisor = Hypervisor(self._project, self.ubridge_path, self.working_dir, server_host) log.info("Starting new uBridge hypervisor {}:{}".format(self._ubridge_hypervisor.host, self._ubridge_hypervisor.port)) yield from self._ubridge_hypervisor.start() diff --git a/gns3server/compute/qemu/qemu_vm.py b/gns3server/compute/qemu/qemu_vm.py index 9ac7eb21..7682c5e9 100644 --- a/gns3server/compute/qemu/qemu_vm.py +++ b/gns3server/compute/qemu/qemu_vm.py @@ -934,6 +934,7 @@ class QemuVM(BaseNode): except OSError as e: raise QemuError("Could not start QEMU console {}\n".format(e)) + @asyncio.coroutine def _termination_callback(self, returncode): """ Called when the process has stopped. @@ -943,9 +944,7 @@ class QemuVM(BaseNode): if self.started: log.info("QEMU process has stopped, return code: %d", returncode) - self.status = "stopped" - self._hw_virtualization = False - self._process = None + yield from self.stop() # A return code of 1 seem fine on Windows if returncode != 0 and (returncode != 1 or not sys.platform.startswith("win")): self.project.emit("log.error", {"message": "QEMU process has stopped, return code: {}\n{}".format(returncode, self.read_stdout())}) diff --git a/tests/compute/qemu/test_qemu_vm.py b/tests/compute/qemu/test_qemu_vm.py index 8b01381d..46c1c992 100644 --- a/tests/compute/qemu/test_qemu_vm.py +++ b/tests/compute/qemu/test_qemu_vm.py @@ -144,7 +144,7 @@ def test_termination_callback(vm, async_run): vm.status = "started" with NotificationManager.instance().queue() as queue: - vm._termination_callback(0) + async_run(vm._termination_callback(0)) assert vm.status == "stopped" async_run(queue.get(0)) #  Ping @@ -163,10 +163,10 @@ def test_termination_callback_error(vm, tmpdir, async_run): vm._stdout_file = str(tmpdir / "qemu.log") with NotificationManager.instance().queue() as queue: - vm._termination_callback(1) + async_run(vm._termination_callback(1)) assert vm.status == "stopped" - async_run(queue.get(0)) #  Ping + async_run(queue.get(0)) # Ping (action, event, kwargs) = queue.get_nowait() assert action == "node.updated"