Fix a potential memory-corruption
authorRobin Gareus <robin@gareus.org>
Wed, 28 Nov 2018 20:41:08 +0000 (21:41 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 28 Nov 2018 20:41:30 +0000 (21:41 +0100)
Disk-writer run() can concurrently use the ringbuffer after it was
free()ed by the butler thread.

libs/ardour/session_transport.cc

index cc46cffad9dcc515be726080afa165d4534acc95..49354dad60e873b68470ce66b76bb430cbda9149 100644 (file)
@@ -492,6 +492,9 @@ Session::butler_transport_work ()
        }
 
        if (ptw & PostTransportAdjustCaptureBuffering) {
+               /* need to prevent concurrency with ARDOUR::DiskWriter::run(),
+                * DiskWriter::adjust_buffering() re-allocates the ringbuffer */
+               Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
                for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
                        boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
                        if (tr) {