From e88b2a7beb24f33e4821f75368ef1727d1d384bc Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 10 Feb 2016 21:37:25 +0100 Subject: [PATCH] commands: Make GLib quit mainloop on SIGTERM Fixes #1435 --- mopidy/commands.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mopidy/commands.py b/mopidy/commands.py index 74905f8f..50590172 100644 --- a/mopidy/commands.py +++ b/mopidy/commands.py @@ -5,6 +5,7 @@ import collections import contextlib import logging import os +import signal import sys import pykka @@ -13,7 +14,7 @@ from mopidy import config as config_lib, exceptions from mopidy.audio import Audio from mopidy.core import Core from mopidy.internal import deps, process, timer, versioning -from mopidy.internal.gi import GLib, GObject +from mopidy.internal.gi import GLib logger = logging.getLogger(__name__) @@ -283,7 +284,13 @@ class RootCommand(Command): help='`section/key=value` values to override config options') def run(self, args, config): - loop = GObject.MainLoop() + def on_sigterm(loop): + logger.info('GLib mainloop got SIGTERM. Exiting...') + loop.quit() + + loop = GLib.MainLoop() + GLib.unix_signal_add( + GLib.PRIORITY_DEFAULT, signal.SIGTERM, on_sigterm, loop) mixer_class = self.get_mixer_class(config, args.registry['mixer']) backend_classes = args.registry['backend'] @@ -300,6 +307,7 @@ class RootCommand(Command): backends = self.start_backends(config, backend_classes, audio) core = self.start_core(config, mixer, backends, audio) self.start_frontends(config, frontend_classes, core) + logger.info('Starting GLib mainloop') loop.run() except (exceptions.BackendError, exceptions.FrontendError,