Handle overlaps better when executing DiffCommands.
[ardour.git] / libs / ardour / butler.cc
index 3b717942f3190b40def969d385c96ef1eb55add4..72f2a0971d0cce97d35799c3eb1c73fd6320fe76 100644 (file)
@@ -87,7 +87,7 @@ Butler::start_thread()
         */
        midi_dstream_buffer_size = (uint32_t) floor (Config->get_midi_track_buffer_seconds() * rate);
 
-       MidiDiskstream::set_readahead_frames ((nframes_t)(Config->get_midi_readahead() * rate));
+       MidiDiskstream::set_readahead_frames ((framecnt_t) (Config->get_midi_readahead() * rate));
 
        Crossfade::set_buffer_size (audio_dstream_playback_buffer_size);
 
@@ -216,14 +216,17 @@ Butler::thread_work ()
                        }
                }
 
-               if (transport_work_requested()) {
-                       _session.butler_transport_work ();
-               }
 
-               disk_work_outstanding = false;
                bytes = 0;
                compute_io = true;
 
+restart:               
+               disk_work_outstanding = false;
+               
+               if (transport_work_requested()) {
+                       _session.butler_transport_work ();
+               }
+
                begin = get_microseconds();
 
                boost::shared_ptr<RouteList> rl = _session.get_routes();
@@ -273,7 +276,7 @@ Butler::thread_work ()
                }
 
                if (!err && transport_work_requested()) {
-                       continue;
+                       goto restart;
                }
 
                if (compute_io) {
@@ -332,7 +335,7 @@ Butler::thread_work ()
                }
 
                if (!err && transport_work_requested()) {
-                       continue;
+                       goto restart;
                }
 
                if (compute_io) {
@@ -358,7 +361,7 @@ Butler::thread_work ()
 //                                     cerr << "AFTER " << (*i)->name() << ": pb = " << (*i)->playback_buffer_load() << " cp = " << (*i)->capture_buffer_load() << endl;
 //                             }
 
-                               continue;
+                               goto restart;
                        }
 
                        paused.signal();