uint32_t frames_read = g_atomic_int_get(&_frames_read_from_ringbuffer);
uint32_t frames_written = g_atomic_int_get(&_frames_written_to_ringbuffer);
- cerr << name() << " MDS written: " << frames_written << " - read: " << frames_read <<
- " = " << frames_written - frames_read
- << " + " << playback_distance << " < " << midi_readahead << " = " << need_butler << ")" << endl;
-
- assert (frames_read <= frames_written);
-
- if ((frames_written - frames_read) + playback_distance < midi_readahead) {
- need_butler = true;
+ /*
+ cerr << name() << " MDS written: " << frames_written << " - read: " << frames_read <<
+ " = " << frames_written - frames_read
+ << " + " << playback_distance << " < " << midi_readahead << " = " << need_butler << ")" << endl;
+ */
+
+ /* frames_read will generally be less than frames_written, but
+ * immediately after an overwrite, we can end up having read some data
+ * before we've written any. we don't need to trip an assert() on this,
+ * but we do need to check so that the decision on whether or not we
+ * need the butler is done correctly.
+ */
+
+ if (frames_read <= frames_written) {
+ if ((frames_written - frames_read) + playback_distance < midi_readahead) {
+ need_butler = true;
+ }
}
g_atomic_int_set (&_frames_read_from_ringbuffer, 0);
g_atomic_int_set (&_frames_written_to_ringbuffer, 0);
- cerr << name() << " FWTRB reset to zero for overwrite\n";
-
read (overwrite_frame, disk_io_chunk_frames, false);
file_frame = overwrite_frame; // it was adjusted by ::read()
overwrite_queued = false;
g_atomic_int_set(&_frames_read_from_ringbuffer, 0);
g_atomic_int_set(&_frames_written_to_ringbuffer, 0);
- cerr << name() << " FWTRB reset to zero for seek\n";
-
playback_sample = frame;
file_frame = frame;
}
g_atomic_int_add (&_frames_written_to_ringbuffer, this_read);
- cerr << "FWTRB added " << this_read << " now " << g_atomic_int_get (&_frames_written_to_ringbuffer) << endl;
if (reversed) {
#endif
g_atomic_int_add (&_frames_read_from_ringbuffer, nframes);
- cerr << name() << " FRFB advanced by " << nframes << " to " << g_atomic_int_get (&_frames_read_from_ringbuffer) << endl;
}
bool