summaryrefslogtreecommitdiffstats
path: root/pulse/pulse.c
diff options
context:
space:
mode:
Diffstat (limited to 'pulse/pulse.c')
-rw-r--r--pulse/pulse.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/pulse/pulse.c b/pulse/pulse.c
index dd17384..ae66b0c 100644
--- a/pulse/pulse.c
+++ b/pulse/pulse.c
@@ -217,36 +217,29 @@ snd_pulse_t *pulse_new(void)
return p;
fail:
+ pulse_free(p);
+
+ return NULL;
+}
+
+void pulse_free(snd_pulse_t * p)
+{
if (p->mainloop)
pa_threaded_mainloop_stop(p->mainloop);
- if (p->context)
+ if (p->context) {
+ pa_context_disconnect(p->context);
pa_context_unref(p->context);
+ }
if (p->mainloop)
pa_threaded_mainloop_free(p->mainloop);
- if (p->main_fd >= 0)
- close(p->main_fd);
-
if (p->thread_fd >= 0)
close(p->thread_fd);
- free(p);
-
- return NULL;
-}
-
-void pulse_free(snd_pulse_t * p)
-{
- pa_threaded_mainloop_stop(p->mainloop);
-
- pa_context_disconnect(p->context);
- pa_context_unref(p->context);
- pa_threaded_mainloop_free(p->mainloop);
-
- close(p->thread_fd);
- close(p->main_fd);
+ if (p->main_fd >= 0)
+ close(p->main_fd);
free(p);
}