summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2012-03-20 11:44:15 +0100
committerDavid Henningsson <david.henningsson@canonical.com>2012-03-20 11:44:15 +0100
commit00c3a4958e543a98ae05988b104129d02b596194 (patch)
tree428a75ceb4b187fc371fcf9bfdbb968e246f0c30
parent13d388b4ce92f51351aacca4a3ab9c895fea72a9 (diff)
module-loopback: Never call adjust_rates after teardown
Calling adjust_rates after teardown results in segfault, and judging from the Ubuntu bug report, this can happen. Actively prevent this by destroying the time event, and by setting adjust_time to 0, we also prevent this routine being called on max request update. BugLink: https://bugs.launchpad.net/bugs/946400 Signed-off-by: David Henningsson <david.henningsson@canonical.com>
-rw-r--r--src/modules/module-loopback.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index 5c87c6c7..ba624530 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -137,6 +137,13 @@ static void teardown(struct userdata *u) {
pa_assert_ctl_context();
pa_asyncmsgq_flush(u->asyncmsgq, 0);
+
+ u->adjust_time = 0;
+ if (u->time_event) {
+ u->core->mainloop->time_free(u->time_event);
+ u->time_event = NULL;
+ }
+
if (u->sink_input)
pa_sink_input_unlink(u->sink_input);
@@ -860,8 +867,5 @@ void pa__done(pa_module*m) {
if (u->asyncmsgq)
pa_asyncmsgq_unref(u->asyncmsgq);
- if (u->time_event)
- u->core->mainloop->time_free(u->time_event);
-
pa_xfree(u);
}