summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-12-13 22:04:29 +0000
committerCarl Hetherington <cth@carlh.net>2017-12-13 22:04:29 +0000
commit7b0af48a5861cb58314db46d29b05289979c2c25 (patch)
treea75d7e59bed0e31b315ea1f32e8a80da1d89b0e5 /src/lib
parent3c634dda1e88fe04b0f468f39bd13ea41a80989b (diff)
Attempt to prevent a deadlock if audio is full and video empty (or vice versa).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/butler.cc18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/lib/butler.cc b/src/lib/butler.cc
index ea0950afb..a78a3b71b 100644
--- a/src/lib/butler.cc
+++ b/src/lib/butler.cc
@@ -101,12 +101,18 @@ Butler::should_run () const
LOG_WARNING ("Butler audio buffers reached %1 frames", _audio.size());
}
- return (_video.size() < MINIMUM_VIDEO_READAHEAD || (!_disable_audio && _audio.size() < MINIMUM_AUDIO_READAHEAD))
- && (_video.size() < MAXIMUM_VIDEO_READAHEAD)
- && (_audio.size() < MAXIMUM_AUDIO_READAHEAD)
- && !_stop_thread
- && !_finished
- && !_died;
+ if (_stop_thread || _finished || _died) {
+ /* Definitely do not run */
+ return false;
+ }
+
+ if (_video.size() < MINIMUM_VIDEO_READAHEAD || (!_disable_audio && _audio.size() < MINIMUM_AUDIO_READAHEAD)) {
+ /* Definitely do run: we need data */
+ return true;
+ }
+
+ /* Run if we aren't full of video or audio */
+ return (_video.size() < MAXIMUM_VIDEO_READAHEAD) && (_audio.size() < MAXIMUM_AUDIO_READAHEAD);
}
void