diff --git a/timeline/src/Engine/Control_Sequence.C b/timeline/src/Engine/Control_Sequence.C index 7340c3d..d58abbb 100644 --- a/timeline/src/Engine/Control_Sequence.C +++ b/timeline/src/Engine/Control_Sequence.C @@ -85,8 +85,12 @@ Control_Sequence::play ( sample_t *buf, nframes_t frame, nframes_t nframes ) incr = 0.0f; float v = y1 + start * incr; + + if ( ! n ) + /* buffer's full, no point in continuing */ + break; - for ( nframes_t i = start; i < len && n--; ++i, v += incr ) + for ( nframes_t i = start; i < len && n && n--; ++i, v += incr ) *(buf++) = v; } diff --git a/timeline/src/Timeline.C b/timeline/src/Timeline.C index ecd03b5..cf7e073 100644 --- a/timeline/src/Timeline.C +++ b/timeline/src/Timeline.C @@ -2208,16 +2208,15 @@ Timeline::process_osc ( void ) { THREAD_ASSERT( OSC ); - /* rdlock(); */ + sequence_lock.rdlock(); - /* reconnect OSC signals */ for ( int i = tracks->children(); i-- ; ) { Track *t = (Track*)tracks->child( i ); t->process_osc(); } - - /* unlock(); */ + + sequence_lock.unlock(); }