From 114d42fee9edcd9ed4743e53247a381f4e04b9b1 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Fri, 7 Feb 2025 00:08:48 +0100 Subject: [PATCH] Chore: Handle immediate exit of core controller fails to start --- music_assistant/__main__.py | 7 ++++++- music_assistant/controllers/music.py | 3 ++- music_assistant/helpers/webserver.py | 13 ++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/music_assistant/__main__.py b/music_assistant/__main__.py index d3db29cd..a2b2e3e7 100644 --- a/music_assistant/__main__.py +++ b/music_assistant/__main__.py @@ -210,7 +210,12 @@ def main() -> None: if dev_mode or log_level == "DEBUG": loop.set_debug(True) loop.set_exception_handler(_global_loop_exception_handler) - await mass.start() + try: + await mass.start() + except Exception: + # exit immediately if startup fails + loop.stop() + raise run( start_mass(), diff --git a/music_assistant/controllers/music.py b/music_assistant/controllers/music.py index ca4b851c..db796e90 100644 --- a/music_assistant/controllers/music.py +++ b/music_assistant/controllers/music.py @@ -174,7 +174,8 @@ class MusicController(CoreController): """Cleanup on exit.""" if self._sync_task and not self._sync_task.done(): self._sync_task.cancel() - await self.database.close() + if self.database: + await self.database.close() @property def providers(self) -> list[MusicProvider]: diff --git a/music_assistant/helpers/webserver.py b/music_assistant/helpers/webserver.py index 2097bc31..223a68ed 100644 --- a/music_assistant/helpers/webserver.py +++ b/music_assistant/helpers/webserver.py @@ -86,10 +86,13 @@ class Webserver: async def close(self) -> None: """Cleanup on exit.""" # stop/clean webserver - await self._tcp_site.stop() - await self._apprunner.cleanup() - await self._webapp.shutdown() - await self._webapp.cleanup() + if self._tcp_site: + await self._tcp_site.stop() + if self._apprunner: + await self._apprunner.cleanup() + if self._webapp: + await self._webapp.shutdown() + await self._webapp.cleanup() @property def base_url(self): @@ -128,7 +131,7 @@ class Webserver: msg = "Dynamic routes are not enabled" raise RuntimeError(msg) key = f"{method}.{path}" - self._dynamic_routes.pop(key) + self._dynamic_routes.pop(key, None) async def serve_static(self, file_path: str, request: web.Request) -> web.FileResponse: """Serve file response.""" -- 2.34.1