[pulseaudio-discuss] [PATCH] module-loopback: Reset callbacks in teardown
David Henningsson
david.henningsson at canonical.com
Tue Apr 3 10:03:40 PDT 2012
Make sure we can't be called into by remaining references to
sink-inputs and source-outputs after we have teared down, as
that will likely lead to segfaults or assertion failures.
Signed-off-by: David Henningsson <david.henningsson at canonical.com>
---
This is a continuation of the "loopback: Fix crash if max request change at
unload" thread. Not sure if this makes sense, it probably does, but I have not
verified how the core will react when all of these are NULL, so won't push without
additional comments/acks.
Frederic, it would be nice to know if this improves your situation as well.
src/modules/module-loopback.c | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index 0d65682..e9feb97 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -152,11 +152,34 @@ static void teardown(struct userdata *u) {
pa_source_output_unlink(u->source_output);
if (u->sink_input) {
+ u->sink_input->parent.process_msg = NULL;
+ u->sink_input->pop = NULL;
+ u->sink_input->process_rewind = NULL;
+ u->sink_input->kill = NULL;
+ u->sink_input->attach = NULL;
+ u->sink_input->detach = NULL;
+ u->sink_input->update_max_rewind = NULL;
+ u->sink_input->update_max_request = NULL;
+ u->sink_input->may_move_to = NULL;
+ u->sink_input->moving = NULL;
+ u->sink_input->userdata = NULL;
+
pa_sink_input_unref(u->sink_input);
u->sink_input = NULL;
}
if (u->source_output) {
+ u->source_output->parent.process_msg = NULL;
+ u->source_output->push = NULL;
+ u->source_output->process_rewind = NULL;
+ u->source_output->kill = NULL;
+ u->source_output->attach = NULL;
+ u->source_output->detach = NULL;
+ u->source_output->state_change = NULL;
+ u->source_output->may_move_to = NULL;
+ u->source_output->moving = NULL;
+ u->source_output->userdata = NULL;
+
pa_source_output_unref(u->source_output);
u->source_output = NULL;
}
--
1.7.9.1
More information about the pulseaudio-discuss
mailing list