summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-04-02 20:14:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-04-02 20:14:28 +0000
commitad7025ae84ecd3dceb194b3445e701d1771537ff (patch)
tree8db02877f8a0568b07e801be967db33f93b4b489 /libs/ardour
parent7ed95f7c37c17d9d13fa1126d5117a17f1906637 (diff)
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
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/diskstream.cc9
1 files changed, 8 insertions, 1 deletions
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> 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> playlist)
if (_playlist) {
_playlist->release();
+ no_prior_playlist = false;
}
_playlist = playlist;
@@ -373,7 +380,7 @@ Diskstream::use_playlist (boost::shared_ptr<Playlist> 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;
}