summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <mznyfn@0pointer.de>2009-08-04 23:55:28 +0200
committerTakashi Iwai <tiwai@suse.de>2009-08-04 23:58:31 +0200
commit50562a9d5d54270ab67f183013204d24cdbeff21 (patch)
tree1840554a7e610d00b3c7ab6fc4d4aeeba1d7a6e1
parent59ccd2aca941b4653803f5415b4985ab35de0c35 (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>
-rw-r--r--pulse/ctl_pulse.c7
-rw-r--r--pulse/pcm_pulse.c19
2 files changed, 12 insertions, 14 deletions
diff --git a/pulse/ctl_pulse.c b/pulse/ctl_pulse.c
index 879f260..85863ed 100644
--- a/pulse/ctl_pulse.c
+++ b/pulse/ctl_pulse.c
@@ -606,11 +606,8 @@ static void pulse_close(snd_ctl_ext_t * ext)
if (ctl->p)
pulse_free(ctl->p);
- if (ctl->source)
- free(ctl->source);
- if (ctl->sink)
- free(ctl->sink);
-
+ free(ctl->source);
+ free(ctl->sink);
free(ctl);
}
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;