pulse: rework object destruction paths a bit
PATCH 5/6 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.
--- pulse/ctl_pulse.c | 7 ++----- pulse/pcm_pulse.c | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 14 deletions(-)
pulse/ctl_pulse.c +2 -5
@@ -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); }
pulse/pcm_pulse.c +10 -9
@@ -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 ;
Signature · 10 lines
1.6.4 Lennart -- Lennart Poettering Red Hat, Inc. lennart [at] poettering [dot] net ICQ# 11060553 http://0pointer.net/lennart/ GnuPG 0x1A015CC4