Fix unobserve_property RuntimeError
This commit is contained in:
parent
5ca3a0250c
commit
b1f81ac561
2 changed files with 36 additions and 2 deletions
27
mpv-test.py
27
mpv-test.py
|
|
@ -206,5 +206,32 @@ class TestLifecycle(unittest.TestCase):
|
|||
handler.assert_any_call('info', 'cplayer', 'Playing: ./test.webm')
|
||||
|
||||
|
||||
class RegressionTests(unittest.TestCase):
|
||||
|
||||
def test_unobserve_property_runtime_error(self):
|
||||
"""
|
||||
Ensure a `RuntimeError` is not thrown within
|
||||
`unobserve_property`.
|
||||
"""
|
||||
handler = mock.Mock()
|
||||
handler.observed_mpv_properties = []
|
||||
|
||||
m = mpv.MPV()
|
||||
m.observe_property('loop', handler)
|
||||
|
||||
try:
|
||||
m.unobserve_property('loop', handler)
|
||||
except RuntimeError:
|
||||
self.fail(
|
||||
"""
|
||||
"RuntimeError" exception thrown within
|
||||
`unobserve_property`
|
||||
""",
|
||||
)
|
||||
finally:
|
||||
m.terminate()
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
9
mpv.py
9
mpv.py
|
|
@ -681,8 +681,15 @@ class MPV(object):
|
|||
fmts = self._property_handlers[name]
|
||||
for fmt, handlers in fmts.items():
|
||||
handlers.remove(handler)
|
||||
if not handlers:
|
||||
|
||||
# remove all properties that have no handlers
|
||||
empty_props = [
|
||||
fmt for fmt, handler in fmts.items() if not handler
|
||||
]
|
||||
|
||||
for fmt in empty_props:
|
||||
del fmts[fmt]
|
||||
|
||||
if not fmts:
|
||||
_mpv_unobserve_property(self._event_handle, hash(name)&0xffffffffffffffff)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue