fix dup free in waves/midi:
authorRobin Gareus <robin@gareus.org>
Thu, 9 Oct 2014 07:48:54 +0000 (09:48 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 9 Oct 2014 07:48:54 +0000 (09:48 +0200)
The PortMidi queue just holds a pointer to the midi events.
The same Midi events are free()d during WavesMidiBuffer::clear()
which is called at cycle start for every buffer and in the dtor
of the WavesMidiBuffer.

libs/backends/wavesaudio/waves_midi_device.cc

index c08586ca8c7af42fae139f88aecf81f245f13a25..9e69633afd4a0715bd5935f611d7700d9697e3fb 100644 (file)
@@ -130,7 +130,7 @@ WavesMidiDevice::close ()
     if (_input_pm_stream) {
         Pm_Close (_input_pm_stream);
         while (1 == Pm_Dequeue (_input_queue, &waves_midi_event)) {
-            delete waves_midi_event;
+            delete waves_midi_event; // XXX possible dup free in ~WavesMidiBuffer() (?)
         }
 
         Pm_QueueDestroy (_input_queue);
@@ -143,7 +143,7 @@ WavesMidiDevice::close ()
     if ( _output_pm_stream ) {
         Pm_Close (_output_pm_stream);
         while (1 == Pm_Dequeue (_output_queue, &waves_midi_event)) {
-            delete waves_midi_event;
+            delete waves_midi_event; // XXX possible dup free in ~WavesMidiBuffer() (?)
         }
         Pm_QueueDestroy (_output_queue);
         _output_queue = NULL;
@@ -232,7 +232,6 @@ WavesMidiDevice::write_midi ()
             }
             // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): SHORTMSG used, ev->tm:" << waves_midi_event->timestamp () - LATENCY <<  std::endl;
         }
-        delete waves_midi_event;
     }
     return;
 }