From 2fee6af9b6e157475159d284af8de1e879bb7a36 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 2 Jun 2021 19:35:44 +0200 Subject: [PATCH] pcm: direct - fix pcmp error path in _snd_pcm_direct_new() Signed-off-by: Jaroslav Kysela --- src/pcm/pcm_direct.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c index 0e5e0421..361805bd 100644 --- a/src/pcm/pcm_direct.c +++ b/src/pcm/pcm_direct.c @@ -2126,24 +2126,20 @@ int _snd_pcm_direct_new(snd_pcm_t **pcmp, snd_pcm_direct_t **_dmix, int type, dmix->type = type; ret = snd_pcm_new(pcmp, type, name, stream, mode); - if (ret < 0) { -_err_nosem: - free(dmix->bindings); - free(dmix); - return ret; - } + if (ret < 0) + goto _err_nosem; while (1) { ret = snd_pcm_direct_semaphore_create_or_connect(dmix); if (ret < 0) { SNDERR("unable to create IPC semaphore"); - goto _err_nosem; + goto _err_nosem_free; } ret = snd_pcm_direct_semaphore_down(dmix, DIRECT_IPC_SEM_CLIENT); if (ret < 0) { snd_pcm_direct_semaphore_discard(dmix); if (--fail_sem_loop <= 0) - goto _err_nosem; + goto _err_nosem_free; continue; } break; @@ -2153,10 +2149,17 @@ _err_nosem: if (ret < 0) { SNDERR("unable to create IPC shm instance"); snd_pcm_direct_semaphore_up(dmix, DIRECT_IPC_SEM_CLIENT); - goto _err_nosem; + goto _err_nosem_free; } else { *_dmix = dmix; } + return ret; +_err_nosem_free: + snd_pcm_free(*pcmp); + *pcmp = NULL; +_err_nosem: + free(dmix->bindings); + free(dmix); return ret; } -- 2.47.3