3b9a5f51f247 — Chris Cannam 4 months ago
Fix small memory leak
2 files changed, 17 insertions(+), 0 deletions(-)

M src/DynamicJACK.h
M src/JACKAudioIO.cpp
M src/DynamicJACK.h +10 -0
@@ 208,6 208,15 @@ static int dynamic_jack_port_unregister(
     return f(client, port);
 }
 
+static void dynamic_jack_free(void *ptr)
+{
+    typedef void(*func)(void *);
+    void *s = symbol("jack_free");
+    if (!s) return;
+    func f = (func)s;
+    f(ptr);
+}    
+
 #define dynamic1(rv, name, argtype, failval) \
     static rv dynamic_##name(argtype arg) { \
         typedef rv (*func) (argtype); \

          
@@ 245,6 254,7 @@ dynamic1(jack_nframes_t, jack_frame_time
 #define jack_port_get_buffer dynamic_jack_port_get_buffer
 #define jack_port_get_latency_range dynamic_jack_port_get_latency_range
 #define jack_frame_time dynamic_jack_frame_time
+#define jack_free dynamic_jack_free
 
 }
 

          
M src/JACKAudioIO.cpp +7 -0
@@ 336,6 336,13 @@ JACKAudioIO::setup(bool connectRecord, b
     if (m_target) {
         m_target->setSystemRecordChannelCount(channelsRec);
     }
+
+    if (playPorts) {
+        jack_free(playPorts);
+    }
+    if (capPorts) {
+        jack_free(capPorts);
+    }
 }
 
 int