From 1f659cc836cdfea956479669d9e26f6c9bad06be Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Tue, 31 Mar 2015 12:39:53 +0300 Subject: [PATCH] sink, source: Fix a volume change leak When a sink or source is freed, there may be pending volume changes that didn't get applied before the IO thread got torn down. Those pending changes need to be freed. The memory leak was reported here: http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/23162/focus=23169 Reported-by: Alexander E. Patrakov --- src/pulsecore/sink.c | 2 ++ src/pulsecore/source.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index dafd1ccbf..f29a9b7c8 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -727,6 +727,8 @@ static void sink_free(pa_object *o) { pa_log_info("Freeing sink %u \"%s\"", s->index, s->name); + pa_sink_volume_change_flush(s); + if (s->monitor_source) { pa_source_unref(s->monitor_source); s->monitor_source = NULL; diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index eb2762197..97f6cd9b0 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -662,6 +662,8 @@ static void source_free(pa_object *o) { pa_log_info("Freeing source %u \"%s\"", s->index, s->name); + pa_source_volume_change_flush(s); + pa_idxset_free(s->outputs, NULL); pa_hashmap_free(s->thread_info.outputs);