diff --git a/mopidy/core.py b/mopidy/core.py index 98575478..6ed9a601 100644 --- a/mopidy/core.py +++ b/mopidy/core.py @@ -22,7 +22,7 @@ from mopidy.gstreamer import GStreamer from mopidy.utils import get_class from mopidy.utils.log import setup_logging from mopidy.utils.path import get_or_create_folder, get_or_create_file -from mopidy.utils.process import GObjectEventThread +from mopidy.utils.process import GObjectEventThread, stop_all_actors from mopidy.utils.settings import list_settings_optparse_callback logger = logging.getLogger('mopidy.core') @@ -42,7 +42,7 @@ def main(): logger.info(u'No actors left. Exiting...') except KeyboardInterrupt: logger.info(u'User interrupt. Exiting...') - ActorRegistry.stop_all() + stop_all_actors() def parse_options(): parser = optparse.OptionParser(version=u'Mopidy %s' % get_version()) diff --git a/mopidy/utils/process.py b/mopidy/utils/process.py index 7f6cf664..47ae6856 100644 --- a/mopidy/utils/process.py +++ b/mopidy/utils/process.py @@ -5,11 +5,18 @@ import gobject gobject.threads_init() from pykka import ActorDeadError +from pykka.registry import ActorRegistry from mopidy import SettingsError logger = logging.getLogger('mopidy.utils.process') +def stop_all_actors(): + num_actors = len(ActorRegistry.get_all()) + while num_actors: + logger.debug(u'Stopping %d actor(s)...', num_actors) + ActorRegistry.stop_all() + num_actors = len(ActorRegistry.get_all()) class BaseThread(threading.Thread): def __init__(self):