From 33c42a2c411d7518d0db5dbe338d0b42192c2730 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 8 Aug 2018 23:59:26 +0100 Subject: [PATCH] Rather dubious fix for crash due to the sequence: - playlist change - _have_valid_pieces -> false - signal butler - but meanwhile, pass happens which calls setup_pieces and starts emitting data from time 0 - this new data is not in sync with what's already in the audio ring buffers --- src/lib/player.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/player.cc b/src/lib/player.cc index c1a6c0f3c..2313e09e5 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -594,7 +594,13 @@ Player::pass () boost::mutex::scoped_lock lm (_mutex); if (!_have_valid_pieces) { - setup_pieces (); + /* This should only happen when we are under the control of the butler. In this case, _have_valid_pieces + will be false if something in the Player has changed and we are waiting for the butler to notice + and do a seek back to the place we were at before. During this time we don't want pass() to do anything, + as just after setup_pieces the new decoders will be back to time 0 until the seek has gone through. Just do nothing + here and assume that the seek will be forthcoming. + */ + return false; } if (_playlist->length() == DCPTime()) { -- 2.30.2