]> code.delx.au - pulseaudio/commitdiff
suspend-on-idle: Ensure we still time out if a stream remains corked
authorDavid Henningsson <david.henningsson@canonical.com>
Tue, 25 Feb 2014 15:56:49 +0000 (16:56 +0100)
committerDavid Henningsson <david.henningsson@canonical.com>
Fri, 28 Feb 2014 12:58:40 +0000 (13:58 +0100)
If a stream is started corked and remains corked, the sink/source
remained idle without being properly suspended. This patch fixes
that issue.

BugLink: https://bugs.launchpad.net/bugs/1284415
Tested-by: Ricardo Salveti <ricardo.salveti@canonical.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
src/modules/module-suspend-on-idle.c

index 0585e51e5beb3c92f8ba18037cd7f67e51dcb0da..959de432431ad0d843a337374eb86582043a08f5 100644 (file)
@@ -141,10 +141,14 @@ static pa_hook_result_t sink_input_fixate_hook_cb(pa_core *c, pa_sink_input_new_
 
     /* We need to resume the audio device here even for
      * PA_SINK_INPUT_START_CORKED, since we need the device parameters
-     * to be fully available while the stream is set up. */
+     * to be fully available while the stream is set up. In that case,
+     * make sure we close the sink again after the timeout interval. */
 
-    if ((d = pa_hashmap_get(u->device_infos, data->sink)))
+    if ((d = pa_hashmap_get(u->device_infos, data->sink))) {
         resume(d);
+        if (pa_sink_check_suspend(d->sink) <= 0)
+            restart(d);
+    }
 
     return PA_HOOK_OK;
 }
@@ -161,8 +165,11 @@ static pa_hook_result_t source_output_fixate_hook_cb(pa_core *c, pa_source_outpu
     else
         d = pa_hashmap_get(u->device_infos, data->source);
 
-    if (d)
+    if (d) {
         resume(d);
+        if (pa_source_check_suspend(d->source) <= 0)
+            restart(d);
+    }
 
     return PA_HOOK_OK;
 }