diff options
author | Max Kellermann <max@duempel.org> | 2009-01-29 18:11:30 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-29 18:11:30 +0100 |
commit | 3defb8eae008c8077866f12863eb2c920d0922a7 (patch) | |
tree | 5ce244856d71b9c3e95ae0a58ec7798864c61273 /src/output | |
parent | 6e31071249d0bfe7923eba4cd76ae25e2270f82d (diff) | |
download | mpd-3defb8eae008c8077866f12863eb2c920d0922a7.tar.gz mpd-3defb8eae008c8077866f12863eb2c920d0922a7.tar.xz mpd-3defb8eae008c8077866f12863eb2c920d0922a7.zip |
jack: allocate ring buffers before connecting
If the ring buffers are allocated after jack_activate(),
mpd_jack_process() might segfault because it attempts to access them.
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/jack_plugin.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/output/jack_plugin.c b/src/output/jack_plugin.c index b66dd4a1f..0bc760b01 100644 --- a/src/output/jack_plugin.c +++ b/src/output/jack_plugin.c @@ -262,6 +262,9 @@ mpd_jack_connect(struct jack_data *jd, struct audio_format *audio_format) jd->audio_format = audio_format; + jd->ringbuffer[0] = jack_ringbuffer_create(jd->ringbuffer_size); + jd->ringbuffer[1] = jack_ringbuffer_create(jd->ringbuffer_size); + if ((jd->client = jack_client_new(mpd_jack_name(jd))) == NULL) { ERROR("jack server not running?\n"); return -1; @@ -308,11 +311,6 @@ mpd_jack_connect(struct jack_data *jd, struct audio_format *audio_format) if ( jd->output_ports[1] ) { const char *name = mpd_jack_name(jd); - jd->ringbuffer[0] = jack_ringbuffer_create(jd->ringbuffer_size); - jd->ringbuffer[1] = jack_ringbuffer_create(jd->ringbuffer_size); - memset(jd->ringbuffer[0]->buf, 0, jd->ringbuffer[0]->size); - memset(jd->ringbuffer[1]->buf, 0, jd->ringbuffer[1]->size); - port_name = xmalloc(sizeof(char) * (7 + strlen(name))); sprintf(port_name, "%s:left", name); |