74 lines
1.7 KiB
Diff
74 lines
1.7 KiB
Diff
|
From 50562a9d5d54270ab67f183013204d24cdbeff21 Mon Sep 17 00:00:00 2001
|
||
|
From: Lennart Poettering <mznyfn@0pointer.de>
|
||
|
Date: Tue, 4 Aug 2009 23:55:28 +0200
|
||
|
Subject: [PATCH 10/11] 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>
|
||
|
---
|
||
|
pulse/ctl_pulse.c | 7 ++-----
|
||
|
pulse/pcm_pulse.c | 19 ++++++++++---------
|
||
|
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;
|
||
|
--
|
||
|
1.6.4
|
||
|
|