summaryrefslogtreecommitdiff
path: root/libs/ardour/session_process.cc
diff options
context:
space:
mode:
authorJesse Chappell <jesse@essej.net>2006-01-06 04:59:17 +0000
committerJesse Chappell <jesse@essej.net>2006-01-06 04:59:17 +0000
commitbd21c474e547d49338ea0efd452895de1e147cd5 (patch)
tree2993bc781777530afc180313c9f69cc898f851e0 /libs/ardour/session_process.cc
parent18844bac7aa0747453ed4d04c4a462f2044a43bb (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.cc25
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()) {