diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:15 +0200 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-08-31 00:44:32 -0700 |
commit | 8c419bb006e376cd0b78453a988976d96027a9f4 (patch) | |
tree | 885679cc69196c9bbeaadb1e4a2155828f727842 /src | |
parent | 641e530f447771642ac627c91e8bff67fcb71fd3 (diff) | |
download | mpd-8c419bb006e376cd0b78453a988976d96027a9f4.tar.gz mpd-8c419bb006e376cd0b78453a988976d96027a9f4.tar.xz mpd-8c419bb006e376cd0b78453a988976d96027a9f4.zip |
jack: added freeJackClient()
No need to destroy the JackData object when an error occurs, since
jack_finishDriver() already frees it. Only deinitialize the jack
library, introduce freeJackClient() for that, and move code from
freeJackData().
Diffstat (limited to 'src')
-rw-r--r-- | src/audioOutputs/audioOutput_jack.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/audioOutputs/audioOutput_jack.c b/src/audioOutputs/audioOutput_jack.c index 4a30e897e..47997df01 100644 --- a/src/audioOutputs/audioOutput_jack.c +++ b/src/audioOutputs/audioOutput_jack.c @@ -63,14 +63,32 @@ static JackData *newJackData(void) return ret; } +static void freeJackClient(JackData *jd) +{ + assert(jd != NULL); + + if (jd->client != NULL) { + jack_deactivate(jd->client); + jack_client_close(jd->client); + jd->client = NULL; + } + + if (jd->ringbuffer[0] != NULL) { + jack_ringbuffer_free(jd->ringbuffer[0]); + jd->ringbuffer[0] = NULL; + } + + if (jd->ringbuffer[1] != NULL) { + jack_ringbuffer_free(jd->ringbuffer[1]); + jd->ringbuffer[1] = NULL; + } +} + static void freeJackData(AudioOutput *audioOutput) { JackData *jd = audioOutput->data; if (jd) { - if (jd->ringbuffer[0]) - jack_ringbuffer_free(jd->ringbuffer[0]); - if (jd->ringbuffer[1]) - jack_ringbuffer_free(jd->ringbuffer[1]); + freeJackClient(jd); free(jd); audioOutput->data = NULL; } @@ -78,13 +96,9 @@ static void freeJackData(AudioOutput *audioOutput) static void jack_finishDriver(AudioOutput *audioOutput) { - JackData *jd = audioOutput->data; int i; - if ( jd && jd->client ) { - jack_deactivate(jd->client); - jack_client_close(jd->client); - } + freeJackData(audioOutput); DEBUG("disconnect_jack (pid=%d)\n", getpid ()); if ( strcmp(name, "mpd") ) { @@ -98,8 +112,6 @@ static void jack_finishDriver(AudioOutput *audioOutput) free(output_ports[i]); output_ports[i] = NULL; } - - freeJackData(audioOutput); } static int srate(mpd_unused jack_nframes_t rate, void *data) @@ -340,7 +352,7 @@ static int jack_openDevice(AudioOutput *audioOutput) } if (jd->client == NULL && connect_jack(audioOutput) < 0) { - freeJackData(audioOutput); + freeJackClient(jd); audioOutput->open = 0; return -1; } @@ -378,7 +390,7 @@ static int jack_playAudio(AudioOutput * audioOutput, if ( jd->shutdown ) { ERROR("Refusing to play, because there is no client thread.\n"); - freeJackData(audioOutput); + freeJackClient(jd); audioOutput->open = 0; return 0; } |