use process lock to lock out process() during playback buffer resizing
This commit is contained in:
parent
f78c659840
commit
87f4a4afff
@ -66,7 +66,6 @@ void
|
||||
Session::schedule_playback_buffering_adjustment ()
|
||||
{
|
||||
add_post_transport_work (PostTransportAdjustPlaybackBuffering);
|
||||
DiskReader::inc_no_disk_output ();
|
||||
_butler->schedule_transport_work ();
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user