commands: Make GLib quit mainloop on SIGTERM

Fixes #1435
This commit is contained in:
Stein Magnus Jodal 2016-02-10 21:37:25 +01:00
parent 3a7e7cdde0
commit e88b2a7beb

View File

@ -5,6 +5,7 @@ import collections
import contextlib import contextlib
import logging import logging
import os import os
import signal
import sys import sys
import pykka import pykka
@ -13,7 +14,7 @@ from mopidy import config as config_lib, exceptions
from mopidy.audio import Audio from mopidy.audio import Audio
from mopidy.core import Core from mopidy.core import Core
from mopidy.internal import deps, process, timer, versioning 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__) logger = logging.getLogger(__name__)
@ -283,7 +284,13 @@ class RootCommand(Command):
help='`section/key=value` values to override config options') help='`section/key=value` values to override config options')
def run(self, args, config): 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']) mixer_class = self.get_mixer_class(config, args.registry['mixer'])
backend_classes = args.registry['backend'] backend_classes = args.registry['backend']
@ -300,6 +307,7 @@ class RootCommand(Command):
backends = self.start_backends(config, backend_classes, audio) backends = self.start_backends(config, backend_classes, audio)
core = self.start_core(config, mixer, backends, audio) core = self.start_core(config, mixer, backends, audio)
self.start_frontends(config, frontend_classes, core) self.start_frontends(config, frontend_classes, core)
logger.info('Starting GLib mainloop')
loop.run() loop.run()
except (exceptions.BackendError, except (exceptions.BackendError,
exceptions.FrontendError, exceptions.FrontendError,