From 3c2d123ab95227f7382fbaef56f25318b57d4ea8 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 14 Jan 2007 02:08:29 +0000 Subject: jack: fix double-free in finish routine git-svn-id: https://svn.musicpd.org/mpd/trunk@5252 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/audioOutputs/audioOutput_jack.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/audioOutputs/audioOutput_jack.c') diff --git a/src/audioOutputs/audioOutput_jack.c b/src/audioOutputs/audioOutput_jack.c index c5eeab728..9c59c5994 100644 --- a/src/audioOutputs/audioOutput_jack.c +++ b/src/audioOutputs/audioOutput_jack.c @@ -64,6 +64,7 @@ static JackData *newJackData(void) static void jack_finishDriver(AudioOutput * audioOutput) { JackData *jd = audioOutput->data; + int i; if (jd && jd->client) { jack_deactivate(jd->client); @@ -71,9 +72,17 @@ static void jack_finishDriver(AudioOutput * audioOutput) } ERROR("disconnect_jack (pid=%d)\n", getpid ()); - if ( strcmp(name, "mpd") ) free(name); - if ( output_ports[0] ) free(output_ports[0]); - if ( output_ports[1] ) free(output_ports[1]); + if (strcmp(name, "mpd")) { + free(name); + name = "mpd"; + } + + for (i = ARRAY_SIZE(output_ports); --i >= 0; ) { + if (!output_ports[i]) + continue; + free(output_ports[i]); + output_ports[i] = NULL; + } if (jd) { if (jd->ringbuffer[0]) -- cgit v1.2.3