From 22efbaaf81e8e7b7b2da380b817cd8a70f7610b0 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 18 Jun 2009 06:39:21 +0900 Subject: [PATCH] fix mplayer blocking on debug output --- anki/sound.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/anki/sound.py b/anki/sound.py index 6da2a7fca..219d15ec6 100644 --- a/anki/sound.py +++ b/anki/sound.py @@ -117,6 +117,19 @@ mplayerQueue = [] mplayerManager = None mplayerCond = threading.Condition() +class MplayerReader(threading.Thread): + "Read any debugging info to prevent mplayer from blocking." + + def run(self): + while 1: + mplayerCond.acquire() + mplayerCond.wait() + mplayerCond.release() + try: + mplayerManager.mplayer.stdout.read() + except: + pass + class MplayerMonitor(threading.Thread): def run(self): @@ -157,7 +170,7 @@ def queueMplayer(path): path = path.encode(sys.getfilesystemencoding()) mplayerCond.acquire() mplayerQueue.append(path) - mplayerCond.notify() + mplayerCond.notifyAll() mplayerCond.release() def clearMplayerQueue(): @@ -190,6 +203,8 @@ def stopMplayerOnce(): mplayerManager = MplayerMonitor() mplayerManager.start() +mplayerReader = MplayerReader() +mplayerReader.start() atexit.register(stopMplayer) addHook("deckClosed", stopMplayerOnce)