mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-24 17:28:08 +00:00
Make sure to wait for the unload coroutine to finish when the server is shutting down.
This commit is contained in:
parent
df72369b0e
commit
66569f26a4
@ -101,7 +101,7 @@ class BaseManager:
|
|||||||
try:
|
try:
|
||||||
yield from self.close_vm(uuid)
|
yield from self.close_vm(uuid)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.warn("Could not delete VM {}: {}".format(uuid, e))
|
log.error("Could not delete VM {}: {}".format(uuid, e), exc_info=1)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if hasattr(BaseManager, "_instance"):
|
if hasattr(BaseManager, "_instance"):
|
||||||
|
@ -61,6 +61,7 @@ class Server:
|
|||||||
return
|
return
|
||||||
return server
|
return server
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
def _stop_application(self):
|
def _stop_application(self):
|
||||||
"""
|
"""
|
||||||
Cleanup the modules (shutdown running emulators etc.)
|
Cleanup the modules (shutdown running emulators etc.)
|
||||||
@ -69,14 +70,15 @@ class Server:
|
|||||||
for module in MODULES:
|
for module in MODULES:
|
||||||
log.debug("Unloading module {}".format(module.__name__))
|
log.debug("Unloading module {}".format(module.__name__))
|
||||||
m = module.instance()
|
m = module.instance()
|
||||||
asyncio.async(m.unload())
|
yield from m.unload()
|
||||||
self._loop.stop()
|
self._loop.stop()
|
||||||
|
|
||||||
def _signal_handling(self):
|
def _signal_handling(self):
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
def signal_handler(signame):
|
def signal_handler(signame):
|
||||||
log.warning("Server has got signal {}, exiting...".format(signame))
|
log.warning("Server has got signal {}, exiting...".format(signame))
|
||||||
self._stop_application()
|
yield from self._stop_application()
|
||||||
|
|
||||||
signals = ["SIGTERM", "SIGINT"]
|
signals = ["SIGTERM", "SIGINT"]
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
@ -85,7 +87,7 @@ class Server:
|
|||||||
signals.extend(["SIGHUP", "SIGQUIT"])
|
signals.extend(["SIGHUP", "SIGQUIT"])
|
||||||
|
|
||||||
for signal_name in signals:
|
for signal_name in signals:
|
||||||
callback = functools.partial(signal_handler, signal_name)
|
callback = functools.partial(asyncio.async, signal_handler(signal_name))
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
# add_signal_handler() is not yet supported on Windows
|
# add_signal_handler() is not yet supported on Windows
|
||||||
signal.signal(getattr(signal, signal_name), callback)
|
signal.signal(getattr(signal, signal_name), callback)
|
||||||
@ -94,10 +96,11 @@ class Server:
|
|||||||
|
|
||||||
def _reload_hook(self):
|
def _reload_hook(self):
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
def reload():
|
def reload():
|
||||||
|
|
||||||
log.info("Reloading")
|
log.info("Reloading")
|
||||||
self._stop_application()
|
yield from self._stop_application()
|
||||||
os.execv(sys.executable, [sys.executable] + sys.argv)
|
os.execv(sys.executable, [sys.executable] + sys.argv)
|
||||||
|
|
||||||
# code extracted from tornado
|
# code extracted from tornado
|
||||||
@ -116,7 +119,7 @@ class Server:
|
|||||||
modified = os.stat(path).st_mtime
|
modified = os.stat(path).st_mtime
|
||||||
if modified > self._start_time:
|
if modified > self._start_time:
|
||||||
log.debug("File {} has been modified".format(path))
|
log.debug("File {} has been modified".format(path))
|
||||||
reload()
|
asyncio.async(reload())
|
||||||
self._loop.call_later(1, self._reload_hook)
|
self._loop.call_later(1, self._reload_hook)
|
||||||
|
|
||||||
def _create_ssl_context(self, server_config):
|
def _create_ssl_context(self, server_config):
|
||||||
|
Loading…
Reference in New Issue
Block a user