Fix race condition in property observer code leading to futures.InvalidStateError
Previously, prepare_and_wait_for_property was slightly confused on the lifetime of that future. This closes #282
This commit is contained in:
parent
5bb298ad11
commit
f1621b629d
2 changed files with 40 additions and 15 deletions
|
|
@ -23,7 +23,7 @@ from contextlib import contextmanager
|
|||
import os.path
|
||||
import os
|
||||
import time
|
||||
from concurrent.futures import Future
|
||||
from concurrent.futures import Future, InvalidStateError
|
||||
|
||||
os.environ["PATH"] = os.path.dirname(__file__) + os.pathsep + os.environ["PATH"]
|
||||
|
||||
|
|
@ -915,6 +915,25 @@ class CommandTests(MpvTestCase):
|
|||
|
||||
class RegressionTests(MpvTestCase):
|
||||
|
||||
def test_wait_for_property_concurrency(self):
|
||||
players = [mpv.MPV(vo=testvo, loglevel='debug', log_handler=timed_print()) for i in range(2)]
|
||||
|
||||
try:
|
||||
for _ in range(150):
|
||||
for player in players:
|
||||
player.play('tests/test.webm')
|
||||
for player in players:
|
||||
player.wait_for_property('seekable')
|
||||
for player in players:
|
||||
player.seek(0, reference='absolute', precision='exact')
|
||||
|
||||
except InvalidStateError:
|
||||
self.fail('InvalidStateError thrown from wait_for_property')
|
||||
|
||||
finally:
|
||||
for player in players:
|
||||
player.terminate()
|
||||
|
||||
def test_unobserve_property_runtime_error(self):
|
||||
"""
|
||||
Ensure a `RuntimeError` is not thrown within
|
||||
|
|
@ -966,3 +985,4 @@ class RegressionTests(MpvTestCase):
|
|||
m.slang = 'ru'
|
||||
m.terminate() # needed for synchronization of event thread
|
||||
handler.assert_has_calls([mock.call('slang', ['jp']), mock.call('slang', ['ru'])])
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue