diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-12-13 22:04:29 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-12-13 22:04:29 +0000 |
| commit | 7b0af48a5861cb58314db46d29b05289979c2c25 (patch) | |
| tree | a75d7e59bed0e31b315ea1f32e8a80da1d89b0e5 /src/lib | |
| parent | 3c634dda1e88fe04b0f468f39bd13ea41a80989b (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.cc | 18 |
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 |
