From c90322f1e2a36bb79425048a0a56b2bc97d53da6 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 24 Mar 2013 00:23:50 +0100 Subject: [PATCH] Use thread traceback logger from Pykka 1.1 --- docs/changes.rst | 4 ++++ mopidy/__main__.py | 6 +++--- mopidy/utils/process.py | 28 ---------------------------- requirements/core.txt | 2 +- 4 files changed, 8 insertions(+), 32 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index a8012710..776aada4 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -10,6 +10,10 @@ v0.13.0 (in development) (in development) +**Dependencies** + +- Pykka >= 1.1 is now required. + **Core** - Log a warning if a track isn't playable to make it more obvious that backend diff --git a/mopidy/__main__.py b/mopidy/__main__.py index 2847497a..5c049daf 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -9,6 +9,8 @@ import sys import gobject gobject.threads_init() +import pykka.debug + # Extract any non-GStreamer arguments, and leave the GStreamer arguments for # processing by GStreamer. This needs to be done before GStreamer is imported, @@ -48,9 +50,7 @@ def main(): options = parse_options() if options.debug_thread or settings.DEBUG_THREAD: - debug_thread = process.DebugThread() - debug_thread.start() - signal.signal(signal.SIGUSR1, debug_thread.handler) + signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks) try: log.setup_logging(options.verbosity_level, options.save_debug_log) diff --git a/mopidy/utils/process.py b/mopidy/utils/process.py index 6be8937c..c8c85f59 100644 --- a/mopidy/utils/process.py +++ b/mopidy/utils/process.py @@ -2,10 +2,8 @@ from __future__ import unicode_literals import logging import signal -import sys import thread import threading -import traceback from pykka import ActorDeadError from pykka.registry import ActorRegistry @@ -79,29 +77,3 @@ class BaseThread(threading.Thread): def run_inside_try(self): raise NotImplementedError - - -class DebugThread(threading.Thread): - daemon = True - name = 'DebugThread' - - event = threading.Event() - - def handler(self, signum, frame): - logger.info('Got %s signal', SIGNALS[signum]) - self.event.set() - - def run(self): - while True: - self.event.wait() - threads = dict((t.ident, t.name) for t in threading.enumerate()) - - for ident, frame in sys._current_frames().items(): - if self.ident != ident: - stack = ''.join(traceback.format_stack(frame)) - logger.debug( - 'Current state of %s (%s):\n%s', - threads.get(ident, '?'), ident, stack) - del frame - - self.event.clear() diff --git a/requirements/core.txt b/requirements/core.txt index 7a28564f..9ffac2cf 100644 --- a/requirements/core.txt +++ b/requirements/core.txt @@ -1,2 +1,2 @@ -Pykka >= 1.0 +Pykka >= 1.1 # Available as python-pykka from apt.mopidy.com