jack: fix multiple segfaults when jackd hasn't been started

git-svn-id: https://svn.musicpd.org/mpd/trunk@5250 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Eric Wong 2007-01-14 02:08:24 +00:00
parent eb2a02dc2b
commit e1ee4505de
1 changed files with 17 additions and 8 deletions

View File

@ -65,19 +65,28 @@ static void jack_finishDriver(AudioOutput * audioOutput)
{ {
JackData *jd = audioOutput->data; JackData *jd = audioOutput->data;
if (jd && jd->client) {
jack_deactivate(jd->client); jack_deactivate(jd->client);
jack_client_close(jd->client); jack_client_close(jd->client);
}
ERROR("disconnect_jack (pid=%d)\n", getpid ()); ERROR("disconnect_jack (pid=%d)\n", getpid ());
if ( strcmp(name, "mpd") ) free(name); if ( strcmp(name, "mpd") ) free(name);
if ( output_ports[0] ) free(output_ports[0]); if ( output_ports[0] ) free(output_ports[0]);
if ( output_ports[1] ) free(output_ports[1]); if ( output_ports[1] ) free(output_ports[1]);
if (jd) {
if (jd->ringbuffer[0])
jack_ringbuffer_free(jd->ringbuffer[0]); jack_ringbuffer_free(jd->ringbuffer[0]);
if (jd->ringbuffer[1])
jack_ringbuffer_free(jd->ringbuffer[1]); jack_ringbuffer_free(jd->ringbuffer[1]);
if (jd->samples1)
free(jd->samples1); free(jd->samples1);
if (jd->samples2)
free(jd->samples2); free(jd->samples2);
free(jd); free(jd);
audioOutput->data = NULL;
}
} }
static int srate(jack_nframes_t rate, void *data) static int srate(jack_nframes_t rate, void *data)
@ -289,7 +298,7 @@ static int jack_openDevice(AudioOutput *audioOutput)
jd = newJackData(); jd = newJackData();
audioOutput->data = jd; audioOutput->data = jd;
if ( !connect_jack(audioOutput) ) { if (connect_jack(audioOutput) < 0) {
jack_finishDriver(audioOutput); jack_finishDriver(audioOutput);
return -1; return -1;
} }