fix mplayer blocking on debug output

This commit is contained in:
Damien Elmes 2009-06-18 06:39:21 +09:00
parent 0cd3b517b3
commit 22efbaaf81

View file

@ -117,6 +117,19 @@ mplayerQueue = []
mplayerManager = None mplayerManager = None
mplayerCond = threading.Condition() 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): class MplayerMonitor(threading.Thread):
def run(self): def run(self):
@ -157,7 +170,7 @@ def queueMplayer(path):
path = path.encode(sys.getfilesystemencoding()) path = path.encode(sys.getfilesystemencoding())
mplayerCond.acquire() mplayerCond.acquire()
mplayerQueue.append(path) mplayerQueue.append(path)
mplayerCond.notify() mplayerCond.notifyAll()
mplayerCond.release() mplayerCond.release()
def clearMplayerQueue(): def clearMplayerQueue():
@ -190,6 +203,8 @@ def stopMplayerOnce():
mplayerManager = MplayerMonitor() mplayerManager = MplayerMonitor()
mplayerManager.start() mplayerManager.start()
mplayerReader = MplayerReader()
mplayerReader.start()
atexit.register(stopMplayer) atexit.register(stopMplayer)
addHook("deckClosed", stopMplayerOnce) addHook("deckClosed", stopMplayerOnce)