Blame SOURCES/0001-suspend-on-idle-resume-on-unload.patch

9df301
From 8479e69deb546135b2f18cf56b2b111360244f22 Mon Sep 17 00:00:00 2001
9df301
From: Wim Taymans <wtaymans@redhat.com>
9df301
Date: Wed, 11 Jan 2017 12:50:13 +0100
9df301
Subject: [PATCH] suspend-on-idle: resume on unload
9df301
9df301
We need to resume all sinks we know about when unloading the module or
9df301
else they will stay suspended forever.
9df301
---
9df301
 src/modules/module-suspend-on-idle.c | 14 ++++++++++++++
9df301
 1 file changed, 14 insertions(+)
9df301
9df301
diff --git a/src/modules/module-suspend-on-idle.c b/src/modules/module-suspend-on-idle.c
9df301
index 0a27a70..00c828a 100644
9df301
--- a/src/modules/module-suspend-on-idle.c
9df301
+++ b/src/modules/module-suspend-on-idle.c
9df301
@@ -495,6 +495,8 @@ fail:
9df301
 
9df301
 void pa__done(pa_module*m) {
9df301
     struct userdata *u;
9df301
+    struct device_info *d;
9df301
+    void *state;
9df301
 
9df301
     pa_assert(m);
9df301
 
9df301
@@ -539,6 +541,18 @@ void pa__done(pa_module*m) {
9df301
     if (u->source_output_state_changed_slot)
9df301
         pa_hook_slot_free(u->source_output_state_changed_slot);
9df301
 
9df301
+    PA_HASHMAP_FOREACH(d, u->device_infos, state) {
9df301
+        if (d->sink && pa_sink_get_state(d->sink) == PA_SINK_SUSPENDED) {
9df301
+            pa_log_debug("Resuming sink %s on module unload.", d->sink->name);
9df301
+            pa_sink_suspend(d->sink, false, PA_SUSPEND_IDLE);
9df301
+        }
9df301
+
9df301
+        if (d->source && pa_source_get_state(d->source) == PA_SOURCE_SUSPENDED) {
9df301
+            pa_log_debug("Resuming source %s on module unload.", d->source->name);
9df301
+            pa_source_suspend(d->source, false, PA_SUSPEND_IDLE);
9df301
+        }
9df301
+    }
9df301
+
9df301
     pa_hashmap_free(u->device_infos);
9df301
 
9df301
     pa_xfree(u);
9df301
-- 
9df301
2.9.3
9df301