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 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,