staging: bcm2835-audio: Don't leak workqueue if open fails
[ Upstream commit 678c5b119307c40f9a17152512f9c949d0ec7292 ] 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> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8e3015e873
commit
34240e87d2
@ -442,16 +442,16 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
|
||||
my_workqueue_init(alsa_stream);
|
||||
|
||||
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]);
|
||||
|
||||
@ -474,7 +474,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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user