From ad7025ae84ecd3dceb194b3445e701d1771537ff Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 2 Apr 2010 20:14:28 +0000 Subject: [PATCH] possible fix for race between diskstream buffer overwrite and channel setup git-svn-id: svn://localhost/ardour2/branches/3.0@6843 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/diskstream.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index f913d0d188..a600cce5e2 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -343,6 +343,12 @@ Diskstream::set_speed (double sp) int Diskstream::use_playlist (boost::shared_ptr playlist) { + if (!playlist) { + return; + } + + bool no_prior_playlist = true; + { Glib::Mutex::Lock lm (state_lock); @@ -354,6 +360,7 @@ Diskstream::use_playlist (boost::shared_ptr playlist) if (_playlist) { _playlist->release(); + no_prior_playlist = false; } _playlist = playlist; @@ -373,7 +380,7 @@ Diskstream::use_playlist (boost::shared_ptr playlist) take care of the buffer refill. */ - if (!overwrite_queued && !(_session.state_of_the_state() & Session::CannotSave)) { + if (!overwrite_queued && no_prior_playlist) { _session.request_overwrite_buffer (this); overwrite_queued = true; }