diff options
author | Jesse Chappell <jesse@essej.net> | 2006-01-06 04:59:17 +0000 |
---|---|---|
committer | Jesse Chappell <jesse@essej.net> | 2006-01-06 04:59:17 +0000 |
commit | bd21c474e547d49338ea0efd452895de1e147cd5 (patch) | |
tree | 2993bc781777530afc180313c9f69cc898f851e0 /libs/ardour/session_process.cc | |
parent | 18844bac7aa0747453ed4d04c4a462f2044a43bb (diff) |
committed RWlock fixes to libardour. added hw monitoring fixes from nick_m. minor alsa midi fix and update rate settings.
git-svn-id: svn://localhost/trunk/ardour2@244 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r-- | libs/ardour/session_process.cc | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 01e75a4749..5bcd595ecc 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -280,11 +280,13 @@ Session::process_with_events (jack_nframes_t nframes) end_frame = _transport_frame + nframes; { - TentativeLockMonitor rm (route_lock, __LINE__, __FILE__); + TentativeRWLockMonitor rm (route_lock, false, __LINE__, __FILE__); + TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__); + Event* this_event; Events::iterator the_next_one; - if (!rm.locked() || (post_transport_work & (PostTransportLocate|PostTransportStop))) { + if (!rm.locked() || !dsm.locked() || (post_transport_work & (PostTransportLocate|PostTransportStop))) { no_roll (nframes, 0); return; } @@ -543,9 +545,11 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset) if (slave_state == Waiting) { // cerr << "waiting at " << slave_transport_frame << endl; - - if (slave_transport_frame >= slave_wait_end) { + TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__); + + if (dsm.locked() && slave_transport_frame >= slave_wait_end) { // cerr << "\tstart at " << _transport_frame << endl; + slave_state = Running; bool ok = true; @@ -662,7 +666,13 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset) */ bool need_butler; + + TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__); + if (!dsm.locked()) { + goto noroll; + } + prepare_diskstreams (); silent_process_routes (nframes, offset); commit_diskstreams (nframes, need_butler); @@ -708,9 +718,10 @@ Session::process_without_events (jack_nframes_t nframes) long frames_moved; { - TentativeLockMonitor rm (route_lock, __LINE__, __FILE__); + TentativeRWLockMonitor rm (route_lock, false, __LINE__, __FILE__); + TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__); - if (!rm.locked() || (post_transport_work & (PostTransportLocate|PostTransportStop))) { + if (!rm.locked() || !dsm.locked() || (post_transport_work & (PostTransportLocate|PostTransportStop))) { no_roll (nframes, 0); return; } @@ -779,7 +790,7 @@ Session::process_without_events (jack_nframes_t nframes) void Session::process_audition (jack_nframes_t nframes) { - TentativeLockMonitor rm (route_lock, __LINE__, __FILE__); + TentativeRWLockMonitor rm (route_lock, false, __LINE__, __FILE__); Event* ev; if (rm.locked()) { |