diff options
author | Lennart Poettering <mznyfn@0pointer.de> | 2009-08-04 23:55:28 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-08-04 23:58:31 +0200 |
commit | 50562a9d5d54270ab67f183013204d24cdbeff21 (patch) | |
tree | 1840554a7e610d00b3c7ab6fc4d4aeeba1d7a6e1 /pulse/pcm_pulse.c | |
parent | 59ccd2aca941b4653803f5415b4985ab35de0c35 (diff) |
pulse: rework object destruction paths a bit
Make sure we deal better with partially initialized structs.
Don't check for pointer state before calling free() since free() does
that anyway.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'pulse/pcm_pulse.c')
-rw-r--r-- | pulse/pcm_pulse.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/pulse/pcm_pulse.c b/pulse/pcm_pulse.c index 98983f8..02a837e 100644 --- a/pulse/pcm_pulse.c +++ b/pulse/pcm_pulse.c @@ -819,21 +819,22 @@ static int pulse_close(snd_pcm_ioplug_t * io) assert(pcm); - pa_threaded_mainloop_lock(pcm->p->mainloop); + if (pcm->p && pcm->p->mainloop) { - if (pcm->stream) { - pa_stream_disconnect(pcm->stream); - pa_stream_unref(pcm->stream); - } + pa_threaded_mainloop_lock(pcm->p->mainloop); - pa_threaded_mainloop_unlock(pcm->p->mainloop); + if (pcm->stream) { + pa_stream_disconnect(pcm->stream); + pa_stream_unref(pcm->stream); + } + + pa_threaded_mainloop_unlock(pcm->p->mainloop); + } if (pcm->p) pulse_free(pcm->p); - if (pcm->device) - free(pcm->device); - + free(pcm->device); free(pcm); return 0; |