From 0a536278fcd2975a60ff02862f37869b8b7e3ddf Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Mon, 12 Oct 2015 16:16:44 +0200 Subject: [PATCH] Fix asyncio error when closing the app Fix #310, https://github.com/GNS3/gns3-gui/issues/705 --- gns3server/modules/base_vm.py | 1 - gns3server/modules/qemu/qemu_vm.py | 4 ++-- gns3server/server.py | 5 ++--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/gns3server/modules/base_vm.py b/gns3server/modules/base_vm.py index ffea595e..a7c29791 100644 --- a/gns3server/modules/base_vm.py +++ b/gns3server/modules/base_vm.py @@ -61,7 +61,6 @@ class BaseVM: def __del__(self): - self.close() if self._temporary_directory is not None: if os.path.exists(self._temporary_directory): shutil.rmtree(self._temporary_directory, ignore_errors=True) diff --git a/gns3server/modules/qemu/qemu_vm.py b/gns3server/modules/qemu/qemu_vm.py index 84baaccc..bd7137de 100644 --- a/gns3server/modules/qemu/qemu_vm.py +++ b/gns3server/modules/qemu/qemu_vm.py @@ -588,7 +588,7 @@ class QemuVM(BaseVM): log.error("Could not start QEMU {}: {}\n{}".format(self.qemu_path, e, stdout)) raise QemuError("Could not start QEMU {}: {}\n{}".format(self.qemu_path, e, stdout)) - self._set_process_priority() + yield from self._set_process_priority() if self._cpu_throttling: self._set_cpu_throttling() @@ -603,7 +603,7 @@ class QemuVM(BaseVM): log.info('Stopping QEMU VM "{}" PID={}'.format(self._name, self._process.pid)) try: self._process.terminate() - self._process.wait() + yield from self._process.wait() except subprocess.TimeoutExpired: try: self._process.kill() diff --git a/gns3server/server.py b/gns3server/server.py index 8ceb006c..d8fad252 100644 --- a/gns3server/server.py +++ b/gns3server/server.py @@ -103,10 +103,9 @@ class Server: def _signal_handling(self): - @asyncio.coroutine def signal_handler(signame): log.warning("Server has got signal {}, exiting...".format(signame)) - yield from self.shutdown_server() + asyncio.async(self.shutdown_server()) signals = ["SIGTERM", "SIGINT"] if sys.platform.startswith("win"): @@ -115,7 +114,7 @@ class Server: signals.extend(["SIGHUP", "SIGQUIT"]) for signal_name in signals: - callback = functools.partial(asyncio.async, signal_handler(signal_name)) + callback = functools.partial(signal_handler, signal_name) if sys.platform.startswith("win"): # add_signal_handler() is not yet supported on Windows signal.signal(getattr(signal, signal_name), callback)