[pulseaudio-discuss] [PATCH 1/4] loopback: Fix segfault in may_move_to() callbacks
Tanu Kaskinen
tanuk at iki.fi
Thu Mar 14 13:07:12 PDT 2013
The sink input may_move_to() callbacks can be called while the source
output is not connected to any source (i.e. is currently moving too),
and vice versa.
Thanks to Frédéric Dalleau for reporting this bug.
---
src/modules/module-loopback.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index 461c4a7..ea24c3b 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -379,13 +379,16 @@ static void source_output_kill_cb(pa_source_output *o) {
}
/* Called from main thread */
-static pa_bool_t source_output_may_move_to_cb(pa_source_output *o, pa_source *dest) {
+static bool source_output_may_move_to_cb(pa_source_output *o, pa_source *dest) {
struct userdata *u;
pa_source_output_assert_ref(o);
pa_assert_ctl_context();
pa_assert_se(u = o->userdata);
+ if (!u->sink_input || !u->sink_input->sink)
+ return true;
+
return dest != u->sink_input->sink->monitor_source;
}
@@ -667,15 +670,15 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
}
/* Called from main thread */
-static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
+static bool sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
struct userdata *u;
pa_sink_input_assert_ref(i);
pa_assert_ctl_context();
pa_assert_se(u = i->userdata);
- if (!u->source_output->source->monitor_of)
- return TRUE;
+ if (!u->source_output || !u->source_output->source)
+ return true;
return dest != u->source_output->source->monitor_of;
}
--
1.7.10.4
More information about the pulseaudio-discuss
mailing list