From f8b57af2c890f3cb98ee07ed7c0192e75146cbf1 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Thu, 14 Mar 2013 22:07:12 +0200 Subject: [PATCH] loopback: Fix segfault in may_move_to() callbacks MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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; } -- 2.7.4