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:
jaseg 2024-06-21 16:14:37 +02:00
parent 5bb298ad11
commit f1621b629d
2 changed files with 40 additions and 15 deletions

33
mpv.py
View file

@ -1036,30 +1036,38 @@ class MPV(object):
rv = cond(val)
if rv:
result.set_result(rv)
except InvalidStateError:
pass
except Exception as e:
try:
result.set_exception(e)
except InvalidStateError:
except:
pass
except InvalidStateError:
pass
self.observe_property(name, observer)
err_unregister = self._set_error_handler(result)
try:
result.set_running_or_notify_cancel()
self.observe_property(name, observer)
err_unregister = self._set_error_handler(result)
if catch_errors:
self._exception_futures.add(result)
yield result
rv = cond(getattr(self, name.replace('-', '_')))
if level_sensitive and rv:
result.set_result(rv)
if level_sensitive:
rv = cond(getattr(self, name.replace('-', '_')))
if rv:
result.set_result(rv)
return
self.check_core_alive()
result.result(timeout)
except InvalidStateError:
pass
else:
self.check_core_alive()
result.result(timeout)
finally:
err_unregister()
self.unobserve_property(name, observer)
@ -1821,9 +1829,6 @@ class MPV(object):
pass
else:
warnings.warn(f'Unhandled exception {e} inside stream open callback for URI {uri}\n{traceback.format_exc()}')
return ErrorCode.LOADING_FAILED
cb_info.contents.cookie = None