mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
create mplayer threads lazily on play, make sure not to deadlock
This commit is contained in:
parent
b5b3f9fd8c
commit
1bd5c988b1
1 changed files with 16 additions and 8 deletions
|
@ -115,6 +115,7 @@ else:
|
|||
|
||||
mplayerQueue = []
|
||||
mplayerManager = None
|
||||
mplayerReader = None
|
||||
mplayerCond = threading.Condition()
|
||||
|
||||
class MplayerReader(threading.Thread):
|
||||
|
@ -166,9 +167,11 @@ class MplayerMonitor(threading.Thread):
|
|||
mplayerCmd, startupinfo=si, stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
except OSError:
|
||||
mplayerCond.release()
|
||||
raise Exception("Audio player not found")
|
||||
|
||||
def queueMplayer(path):
|
||||
ensureMplayerThreads()
|
||||
path = path.encode(sys.getfilesystemencoding())
|
||||
mplayerCond.acquire()
|
||||
mplayerQueue.append(path)
|
||||
|
@ -180,7 +183,20 @@ def clearMplayerQueue():
|
|||
mplayerQueue.append(None)
|
||||
mplayerCond.release()
|
||||
|
||||
def ensureMplayerThreads():
|
||||
global mplayerManager, mplayerReader
|
||||
if not mplayerManager:
|
||||
mplayerManager = MplayerMonitor()
|
||||
mplayerManager.daemon = True
|
||||
mplayerManager.start()
|
||||
mplayerReader = MplayerReader()
|
||||
mplayerReader.daemon = True
|
||||
mplayerReader.start()
|
||||
atexit.register(stopMplayer)
|
||||
|
||||
def stopMplayer(restart=False):
|
||||
if not mplayerManager:
|
||||
return
|
||||
mplayerCond.acquire()
|
||||
if mplayerManager.mplayer:
|
||||
while 1:
|
||||
|
@ -206,14 +222,6 @@ def stopMplayer(restart=False):
|
|||
def stopMplayerOnce():
|
||||
stopMplayer(restart=True)
|
||||
|
||||
mplayerManager = MplayerMonitor()
|
||||
mplayerManager.daemon = True
|
||||
mplayerManager.start()
|
||||
mplayerReader = MplayerReader()
|
||||
mplayerReader.daemon = True
|
||||
mplayerReader.start()
|
||||
atexit.register(stopMplayer)
|
||||
|
||||
addHook("deckClosed", stopMplayerOnce)
|
||||
|
||||
# PyAudio recording
|
||||
|
|
Loading…
Reference in a new issue