From 57e16b9a056ace3e9de02387bd38f73f9901684d Mon Sep 17 00:00:00 2001 From: Jacek Konieczny Date: Sun, 6 Dec 2015 18:42:14 +0100 Subject: [PATCH] Release audio devices when alsa_driver_new fails Call JackAlsaDriver::Close() when alsa_driver_new() fails, to release devices acquired just before that call. Otherwise JackAlsaDriver::Open() will never succeed again, as re-acquiring the same device will fail with "A handler is already registered" DBus error. --- linux/alsa/JackAlsaDriver.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 05c0ded3..508a0d17 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -346,7 +346,7 @@ int JackAlsaDriver::Open(jack_nframes_t nframes, fPlaybackChannels = ((alsa_driver_t *)fDriver)->playback_nchannels; return 0; } else { - JackAudioDriver::Close(); + Close(); return -1; } } @@ -356,7 +356,9 @@ int JackAlsaDriver::Close() // Generic audio driver close int res = JackAudioDriver::Close(); - alsa_driver_delete((alsa_driver_t*)fDriver); + if (fDriver) { + alsa_driver_delete((alsa_driver_t*)fDriver); + } if (JackServerGlobals::on_device_release != NULL) {