1
0
Fork 0

staging: bcm2835-audio: Don't leak workqueue if open fails

Currently, if bcm2835_audio_open() fails partway, the allocated
workqueue is leaked. Avoid that.

While at it, propagate the return value of
bcm2835_audio_open_connection() on failure instead of returning -1.

Signed-off-by: Tuomas Tynkkynen <tuomas@tuxera.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
zero-colors
Tuomas Tynkkynen 2018-07-13 00:54:17 +03:00 committed by Greg Kroah-Hartman
parent 4feb0f375f
commit 678c5b1193
1 changed files with 10 additions and 6 deletions

View File

@ -428,16 +428,16 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
return -ENOMEM;
ret = bcm2835_audio_open_connection(alsa_stream);
if (ret) {
ret = -1;
goto exit;
}
if (ret)
goto free_wq;
instance = alsa_stream->instance;
LOG_DBG(" instance (%p)\n", instance);
if (mutex_lock_interruptible(&instance->vchi_mutex)) {
LOG_DBG("Interrupted whilst waiting for lock on (%d)\n", instance->num_connections);
return -EINTR;
ret = -EINTR;
goto free_wq;
}
vchi_service_use(instance->vchi_handle[0]);
@ -460,7 +460,11 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
unlock:
vchi_service_release(instance->vchi_handle[0]);
mutex_unlock(&instance->vchi_mutex);
exit:
free_wq:
if (ret)
destroy_workqueue(alsa_stream->my_wq);
return ret;
}