Lennart Poettering c6ba4a
From be8799947bac41c50460111b0ac20ff8176b6b47 Mon Sep 17 00:00:00 2001
Lennart Poettering 1ae1f5
From: Lennart Poettering <lennart@poettering.net>
Lennart Poettering 1ae1f5
Date: Fri, 31 Jul 2009 15:25:44 +0200
Lennart Poettering c6ba4a
Subject: [PATCH 02/11] pulse: get rid of a number of assert()s
Lennart Poettering 1ae1f5
Lennart Poettering 1ae1f5
Instead of hitting an assert when any of the plugin functions is called
Lennart Poettering 1ae1f5
in an invalid context we should return a clean error to make sure
Lennart Poettering 1ae1f5
programs are not unnecessarily aborted.
Lennart Poettering 1ae1f5
Lennart Poettering 1ae1f5
This should fix issues such as http://pulseaudio.org/ticket/595
Lennart Poettering c6ba4a
Lennart Poettering c6ba4a
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Lennart Poettering 1ae1f5
---
Lennart Poettering c6ba4a
 pulse/ctl_pulse.c |   35 ++++++++++++++++++-----
Lennart Poettering 1ae1f5
 pulse/pcm_pulse.c |   79 +++++++++++++++++++++++++++++++++++++++++------------
Lennart Poettering 1ae1f5
 pulse/pulse.c     |   34 ++++++++++++++++-------
Lennart Poettering c6ba4a
 3 files changed, 112 insertions(+), 36 deletions(-)
Lennart Poettering 1ae1f5
Lennart Poettering 1ae1f5
diff --git a/pulse/ctl_pulse.c b/pulse/ctl_pulse.c
Lennart Poettering c6ba4a
index c6cf9e2..2caa29b 100644
Lennart Poettering 1ae1f5
--- a/pulse/ctl_pulse.c
Lennart Poettering 1ae1f5
+++ b/pulse/ctl_pulse.c
Lennart Poettering 1ae1f5
@@ -125,8 +125,9 @@ static void event_cb(pa_context * c, pa_subscription_event_type_t t,
Lennart Poettering 1ae1f5
 	pa_operation *o;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
-	assert(ctl->p);
Lennart Poettering 1ae1f5
-	assert(ctl->p->context);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	o = pa_context_get_sink_info_by_name(ctl->p->context, ctl->sink,
Lennart Poettering 1ae1f5
 					     sink_info_cb, ctl);
Lennart Poettering 1ae1f5
@@ -148,8 +149,9 @@ static int pulse_update_volume(snd_ctl_pulse_t * ctl)
Lennart Poettering 1ae1f5
 	pa_operation *o;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
-	assert(ctl->p);
Lennart Poettering 1ae1f5
-	assert(ctl->p->context);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	o = pa_context_get_sink_info_by_name(ctl->p->context, ctl->sink,
Lennart Poettering 1ae1f5
 					     sink_info_cb, ctl);
Lennart Poettering 1ae1f5
@@ -203,6 +205,9 @@ static int pulse_elem_list(snd_ctl_ext_t * ext, unsigned int offset,
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
 	snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
@@ -260,7 +265,9 @@ static int pulse_get_attribute(snd_ctl_ext_t * ext, snd_ctl_ext_key_t key,
Lennart Poettering 1ae1f5
 		return -EINVAL;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
-	assert(ctl->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -311,7 +318,9 @@ static int pulse_read_integer(snd_ctl_ext_t * ext, snd_ctl_ext_key_t key,
Lennart Poettering 1ae1f5
 	pa_cvolume *vol = NULL;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
-	assert(ctl->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -361,7 +370,9 @@ static int pulse_write_integer(snd_ctl_ext_t * ext, snd_ctl_ext_key_t key,
Lennart Poettering 1ae1f5
 	pa_cvolume *vol = NULL;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
-	assert(ctl->p && ctl->p->context);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -465,6 +476,9 @@ static void pulse_subscribe_events(snd_ctl_ext_t * ext, int subscribe)
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	ctl->subscribed = !!(subscribe & SND_CTL_EVENT_MASK_VALUE);
Lennart Poettering 1ae1f5
@@ -481,6 +495,9 @@ static int pulse_read_event(snd_ctl_ext_t * ext, snd_ctl_elem_id_t * id,
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(ctl);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	if (!ctl->updated || !ctl->subscribed)
Lennart Poettering c6ba4a
@@ -526,7 +543,9 @@ static int pulse_ctl_poll_revents(snd_ctl_ext_t * ext, struct pollfd *pfd,
Lennart Poettering 1ae1f5
 	int err = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering c6ba4a
 	assert(ctl);
Lennart Poettering 1ae1f5
-	assert(ctl->p);
Lennart Poettering c6ba4a
+
Lennart Poettering 1ae1f5
+	if (!ctl->p || !ctl->p->mainloop || !ctl->p->context)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(ctl->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
diff --git a/pulse/pcm_pulse.c b/pulse/pcm_pulse.c
Lennart Poettering 1ae1f5
index c276839..24347f9 100644
Lennart Poettering 1ae1f5
--- a/pulse/pcm_pulse.c
Lennart Poettering 1ae1f5
+++ b/pulse/pcm_pulse.c
Lennart Poettering 1ae1f5
@@ -106,6 +106,9 @@ static int update_active(snd_pcm_pulse_t *pcm) {
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
 	ret = check_active(pcm);
Lennart Poettering 1ae1f5
 	if (ret < 0)
Lennart Poettering 1ae1f5
 		return ret;
Lennart Poettering 1ae1f5
@@ -125,7 +128,9 @@ static int pulse_start(snd_pcm_ioplug_t * io)
Lennart Poettering 1ae1f5
 	int err = 0, err_o = 0, err_u = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -174,7 +179,9 @@ static int pulse_stop(snd_pcm_ioplug_t * io)
Lennart Poettering 1ae1f5
 	int err = 0, err_o = 0, err_u = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -224,7 +231,9 @@ static int pulse_drain(snd_pcm_ioplug_t * io)
Lennart Poettering 1ae1f5
 	int err = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -259,7 +268,9 @@ static snd_pcm_sframes_t pulse_pointer(snd_pcm_ioplug_t * io)
Lennart Poettering 1ae1f5
 	snd_pcm_sframes_t ret = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	if (io->state == SND_PCM_STATE_XRUN)
Lennart Poettering 1ae1f5
 		return -EPIPE;
Lennart Poettering 1ae1f5
@@ -269,7 +280,10 @@ static snd_pcm_sframes_t pulse_pointer(snd_pcm_ioplug_t * io)
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
-	assert(pcm->stream);
Lennart Poettering 1ae1f5
+	if (!pcm->stream) {
Lennart Poettering 1ae1f5
+		ret = -EBADFD;
Lennart Poettering 1ae1f5
+		goto finish;
Lennart Poettering 1ae1f5
+	}
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	ret = pulse_check_connection(pcm->p);
Lennart Poettering 1ae1f5
 	if (ret < 0)
Lennart Poettering 1ae1f5
@@ -305,11 +319,16 @@ static int pulse_delay(snd_pcm_ioplug_t * io, snd_pcm_sframes_t * delayp)
Lennart Poettering 1ae1f5
 	pa_usec_t lat = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
-	assert(pcm->stream);
Lennart Poettering 1ae1f5
+	if (!pcm->stream) {
Lennart Poettering 1ae1f5
+		err = -EBADFD;
Lennart Poettering 1ae1f5
+		goto finish;
Lennart Poettering 1ae1f5
+	}
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	for (;;) {
Lennart Poettering 1ae1f5
 		err = pulse_check_connection(pcm->p);
Lennart Poettering 1ae1f5
@@ -354,11 +373,16 @@ static snd_pcm_sframes_t pulse_write(snd_pcm_ioplug_t * io,
Lennart Poettering 1ae1f5
 	snd_pcm_sframes_t ret = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
-	assert(pcm->stream);
Lennart Poettering 1ae1f5
+	if (!pcm->stream) {
Lennart Poettering 1ae1f5
+		ret = -EBADFD;
Lennart Poettering 1ae1f5
+		goto finish;
Lennart Poettering 1ae1f5
+	}
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	ret = pulse_check_connection(pcm->p);
Lennart Poettering 1ae1f5
 	if (ret < 0)
Lennart Poettering 1ae1f5
@@ -409,11 +433,16 @@ static snd_pcm_sframes_t pulse_read(snd_pcm_ioplug_t * io,
Lennart Poettering 1ae1f5
 	snd_pcm_sframes_t ret = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
-	assert(pcm->stream);
Lennart Poettering 1ae1f5
+	if (!pcm->stream) {
Lennart Poettering 1ae1f5
+		ret = -EBADFD;
Lennart Poettering 1ae1f5
+		goto finish;
Lennart Poettering 1ae1f5
+	}
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	ret = pulse_check_connection(pcm->p);
Lennart Poettering 1ae1f5
 	if (ret < 0)
Lennart Poettering 1ae1f5
@@ -480,7 +509,9 @@ static void stream_request_cb(pa_stream * p, size_t length, void *userdata)
Lennart Poettering 1ae1f5
 	snd_pcm_pulse_t *pcm = userdata;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	update_active(pcm);
Lennart Poettering 1ae1f5
 }
Lennart Poettering 1ae1f5
@@ -490,7 +521,9 @@ static void stream_underrun_cb(pa_stream * p, void *userdata)
Lennart Poettering 1ae1f5
 	snd_pcm_pulse_t *pcm = userdata;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pcm->underrun = 1;
Lennart Poettering 1ae1f5
 }
Lennart Poettering 1ae1f5
@@ -499,7 +532,9 @@ static void stream_latency_cb(pa_stream *p, void *userdata) {
Lennart Poettering 1ae1f5
 	snd_pcm_pulse_t *pcm = userdata;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_signal(pcm->p->mainloop, 0);
Lennart Poettering 1ae1f5
 }
Lennart Poettering 1ae1f5
@@ -512,7 +547,9 @@ static int pulse_pcm_poll_revents(snd_pcm_ioplug_t * io,
Lennart Poettering 1ae1f5
 	snd_pcm_pulse_t *pcm = io->private_data;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -541,7 +578,9 @@ static int pulse_prepare(snd_pcm_ioplug_t * io)
Lennart Poettering 1ae1f5
 	unsigned c, d;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -645,7 +684,9 @@ static int pulse_hw_params(snd_pcm_ioplug_t * io,
Lennart Poettering 1ae1f5
 	int err = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(pcm);
Lennart Poettering 1ae1f5
-	assert(pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -745,7 +786,9 @@ static int pulse_pause(snd_pcm_ioplug_t * io, int enable)
Lennart Poettering 1ae1f5
 	int err = 0;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert (pcm);
Lennart Poettering 1ae1f5
-	assert (pcm->p);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!pcm->p)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
diff --git a/pulse/pulse.c b/pulse/pulse.c
Lennart Poettering 1ae1f5
index 3940238..95d8dde 100644
Lennart Poettering 1ae1f5
--- a/pulse/pulse.c
Lennart Poettering 1ae1f5
+++ b/pulse/pulse.c
Lennart Poettering 1ae1f5
@@ -32,8 +32,9 @@ int pulse_check_connection(snd_pulse_t * p)
Lennart Poettering 1ae1f5
 	pa_context_state_t state;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(p);
Lennart Poettering 1ae1f5
-	assert(p->context);
Lennart Poettering 1ae1f5
-	assert(p->mainloop);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!p->context || !p->mainloop)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	state = pa_context_get_state(p->context);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -77,8 +78,12 @@ int pulse_wait_operation(snd_pulse_t * p, pa_operation * o)
Lennart Poettering 1ae1f5
 {
Lennart Poettering 1ae1f5
 	assert(p);
Lennart Poettering 1ae1f5
 	assert(o);
Lennart Poettering 1ae1f5
-	assert(p->state == PULSE_STATE_READY);
Lennart Poettering 1ae1f5
-	assert(p->mainloop);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (p->state != PULSE_STATE_READY)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!p->mainloop)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	for (;;) {
Lennart Poettering 1ae1f5
 		int err;
Lennart Poettering 1ae1f5
@@ -103,8 +108,12 @@ int pulse_wait_stream_state(snd_pulse_t * p, pa_stream * stream,
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(p);
Lennart Poettering 1ae1f5
 	assert(stream);
Lennart Poettering 1ae1f5
-	assert(p->state == PULSE_STATE_READY);
Lennart Poettering 1ae1f5
-	assert(p->mainloop);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (p->state != PULSE_STATE_READY)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!p->mainloop)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	for (;;) {
Lennart Poettering 1ae1f5
 		int err;
Lennart Poettering 1ae1f5
@@ -197,7 +206,9 @@ snd_pulse_t *pulse_new(void)
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	p->context =
Lennart Poettering 1ae1f5
 	    pa_context_new(pa_threaded_mainloop_get_api(p->mainloop), buf);
Lennart Poettering 1ae1f5
-	assert(p->context);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!p->context)
Lennart Poettering 1ae1f5
+		goto fail;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_context_set_state_callback(p->context, context_state_cb, p);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
@@ -246,9 +257,12 @@ int pulse_connect(snd_pulse_t * p, const char *server)
Lennart Poettering 1ae1f5
 	int err;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	assert(p);
Lennart Poettering 1ae1f5
-	assert(p->context);
Lennart Poettering 1ae1f5
-	assert(p->mainloop);
Lennart Poettering 1ae1f5
-	assert(p->state == PULSE_STATE_INIT);
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (!p->context || !p->mainloop)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
+
Lennart Poettering 1ae1f5
+	if (p->state != PULSE_STATE_INIT)
Lennart Poettering 1ae1f5
+		return -EBADFD;
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
 	pa_threaded_mainloop_lock(p->mainloop);
Lennart Poettering 1ae1f5
 
Lennart Poettering 1ae1f5
-- 
Lennart Poettering c6ba4a
1.6.4
Lennart Poettering 1ae1f5