possible fix for race between diskstream buffer overwrite and channel setup
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 2 Apr 2010 20:14:28 +0000 (20:14 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 2 Apr 2010 20:14:28 +0000 (20:14 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6843 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/diskstream.cc

index f913d0d188b3b581116715a6d5b048233ef6dfad..a600cce5e2ec9f17c643616994dcc676aaebaa38 100644 (file)
@@ -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;
        }