use process lock to lock out process() during playback buffer resizing

This commit is contained in:
Paul Davis 2019-12-11 20:36:00 -07:00
parent f78c659840
commit 87f4a4afff
2 changed files with 4 additions and 9 deletions

View File

@ -66,7 +66,6 @@ void
Session::schedule_playback_buffering_adjustment ()
{
add_post_transport_work (PostTransportAdjustPlaybackBuffering);
DiskReader::inc_no_disk_output ();
_butler->schedule_transport_work ();
}

View File

@ -716,20 +716,13 @@ Session::butler_completed_transport_work ()
TFSM_EVENT (TransportFSM::LocateDone);
}
if (ptw & PostTransportAdjustPlaybackBuffering) {
/* we blocked output while this happened */
DiskReader::dec_no_disk_output ();
ptw = PostTransportWork (ptw & ~PostTransportAdjustPlaybackBuffering);
set_post_transport_work (ptw);
}
bool start_after_butler_done_msg = false;
if ((ptw & (PostTransportReverse|PostTransportRoll))) {
start_after_butler_done_msg = true;
}
ptw = PostTransportWork (ptw & ~(PostTransportAdjustCaptureBuffering|PostTransportOverWrite|PostTransportReverse|PostTransportRoll));
ptw = PostTransportWork (ptw & ~(PostTransportAdjustPlaybackBuffering|PostTransportAdjustCaptureBuffering|PostTransportOverWrite|PostTransportReverse|PostTransportRoll));
set_post_transport_work (ptw);
set_next_event ();
@ -1147,6 +1140,9 @@ Session::butler_transport_work ()
}
if (ptw & PostTransportAdjustPlaybackBuffering) {
/* need to prevent concurrency with ARDOUR::Reader::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) {