Hold lock for the whole of Butler::video(). Fixes jumpy nudge-seek
authorCarl Hetherington <cth@carlh.net>
Sun, 18 Feb 2018 01:26:03 +0000 (01:26 +0000)
committerCarl Hetherington <cth@carlh.net>
Sun, 18 Feb 2018 01:26:03 +0000 (01:26 +0000)
commite941ab2b02cf01ab15427e47124b7dd32425095c
tree805c5e08a7dda066a60ec0764ae0d3d0ae4d75f1
parent59500421bda6e44bc6e92e27c6c21ea071eb81c1
Hold lock for the whole of Butler::video().  Fixes jumpy nudge-seek
when playing DCPs.

Before, the lock was only held to check _pending_seek_position.
With that arrangement, this sequence was possible:
1. video arrives, check _pending_seek_position, decide it's ok, release lock
2. Butler::seek called, sets _pending_seek_position, clears _video
3. video that arrived in #1 is put into _video by ::video()
4. that video is given to an awaiting get_video() call.
This clearly subverts the attempts not to accept new video data while
a seek is pending.
src/lib/butler.cc