mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-03 09:01:52 -05:00
pcm: direct - fix pcmp error path in _snd_pcm_direct_new()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
013ec607db
commit
2fee6af9b6
1 changed files with 12 additions and 9 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue