From 7b0af48a5861cb58314db46d29b05289979c2c25 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 13 Dec 2017 22:04:29 +0000 Subject: Attempt to prevent a deadlock if audio is full and video empty (or vice versa). --- src/lib/butler.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/lib') 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 -- cgit v1.2.3