Fixed SIGSEGV based on thinkos

This commit is contained in:
Jaroslav Kysela 2001-06-18 14:43:46 +00:00
parent 25ad23d202
commit 735e5473e0

View file

@ -437,7 +437,7 @@ int _snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name,
{ {
snd_config_iterator_t i, next; snd_config_iterator_t i, next;
int err; int err;
snd_pcm_t *spcm; snd_pcm_t *rpcm = NULL, *spcm;
snd_config_t *slave = NULL, *sconf; snd_config_t *slave = NULL, *sconf;
snd_config_t *hooks = NULL; snd_config_t *hooks = NULL;
snd_config_for_each(i, next, conf) { snd_config_for_each(i, next, conf) {
@ -471,7 +471,7 @@ int _snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name,
snd_config_delete(sconf); snd_config_delete(sconf);
if (err < 0) if (err < 0)
return err; return err;
err = snd_pcm_hooks_open(pcmp, name, spcm, 1); err = snd_pcm_hooks_open(&rpcm, name, spcm, 1);
if (err < 0) { if (err < 0) {
snd_pcm_close(spcm); snd_pcm_close(spcm);
return err; return err;
@ -486,16 +486,17 @@ int _snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name,
if (err < 0) { if (err < 0) {
SNDERR("unknown pcm_hook %s", str); SNDERR("unknown pcm_hook %s", str);
} else { } else {
err = snd_pcm_hook_add_conf(*pcmp, root, n); err = snd_pcm_hook_add_conf(rpcm, root, n);
snd_config_delete(n); snd_config_delete(n);
} }
} else } else
err = snd_pcm_hook_add_conf(*pcmp, root, n); err = snd_pcm_hook_add_conf(rpcm, root, n);
if (err < 0) { if (err < 0) {
snd_pcm_close(*pcmp); snd_pcm_close(rpcm);
return err; return err;
} }
} }
*pcmp = rpcm;
return 0; return 0;
} }