Fix alsa_init() error path.
authorAndre Noll <maan@systemlinux.org>
Sun, 20 Feb 2011 16:01:15 +0000 (17:01 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 20 Feb 2011 19:26:29 +0000 (20:26 +0100)
If alsa_init() fails, alsa_write_post_select() removes the buffer tree
node and sets t->error to a negative value. para_audiod (or para_write)
then calls alsa->close() to deallocate any resources. At this point
wn->private_data is non-NULL while  pad->handle _is_ NULL. The
subsequent call to snd_pcm_nonblock() therefore triggers the assertion

para_audiod: pcm.c:724: snd_pcm_nonblock: Assertion `pcm' failed.

which aborts para_audiod. Fix this bug by freeing the ->private_data
pointer already in alsa_write_post_select() if alsa_init() fails. This
way, ->private_data and pad->handle are either both NULL or both
non-NULL, which meets the expectations of alsa_close().


No differences found