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 <patrakov at gmail.com> --- 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 dafd1cc..f29a9b7 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 eb27621..97f6cd9 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); -- 1.9.3