From 9a80f4c3f349d58c6fec1cea1209ff91b4e81910 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Tue, 6 Mar 2012 04:44:11 -0800 Subject: [PATCH] Sequencer: Don't leak from the output buffer when suppressing duplicate noteon/offs. --- sequencer/src/jack.C | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/sequencer/src/jack.C b/sequencer/src/jack.C index ec38670..98ca0dc 100644 --- a/sequencer/src/jack.C +++ b/sequencer/src/jack.C @@ -121,17 +121,18 @@ midi_output_event ( int port, const midievent *e ) event *fe = freelist.first(); if ( ! fe ) + { WARNING( "output buffer underrun" ); + } else { - freelist.unlink( fe ); - - *fe = *e; - if ( e->is_note_on() ) { if ( notes_on[ port ][ e->channel() ][ e->note() ] == 0 ) { + freelist.unlink( fe ); + *fe = *e; + output[ port ].events.insert( fe ); ++notes_on[ port ][ e->channel() ][ e->note() ]; } @@ -148,13 +149,20 @@ midi_output_event ( int port, const midievent *e ) } else { - output[ port ].events.insert( fe ); + freelist.unlink( fe ); + *fe = *e; + output[ port ].events.insert( fe ); --notes_on[ port ][ e->channel() ][ e->note() ]; } } else + { + freelist.unlink( fe ); + *fe = *e; + output[ port ].events.insert( fe ); + } } }