summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_track.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/audio_track.cc')
-rw-r--r--libs/ardour/audio_track.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index 95099676e7..beec3ee4de 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -483,18 +483,25 @@ AudioTrack::no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_fra
return 0;
}
+ bool send_silence;
+
if (session_state_changing) {
+ if (_session.transport_speed() != 0.0f) {
+ /* we're rolling but some state is changing (e.g. our diskstream contents)
+ so we cannot use them. Be silent till this is over.
- /* XXX is this safe to do against transport state changes? */
-
- passthru_silence (start_frame, end_frame, nframes, 0, false);
- return 0;
+ XXX note the absurdity of ::no_roll() being called when we ARE rolling!
+ */
+ passthru_silence (start_frame, end_frame, nframes, 0, false);
+ return 0;
+ }
+ /* we're really not rolling, so we're either delivery silence or actually
+ monitoring, both of which are safe to do while session_state_changing is true.
+ */
}
audio_diskstream()->check_record_status (start_frame, nframes, can_record);
- bool send_silence;
-
if (_have_internal_generator) {
/* since the instrument has no input streams,
there is no reason to send any signal