From 7db24504478ac5eb40f8114e7f57302be5e59849 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 14 Nov 2018 10:00:50 +0100 Subject: [PATCH] output/alsa: refactor the drain EAGAIN workaround --- src/output/plugins/AlsaOutputPlugin.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/output/plugins/AlsaOutputPlugin.cxx b/src/output/plugins/AlsaOutputPlugin.cxx index 841b12b8c..29510f870 100644 --- a/src/output/plugins/AlsaOutputPlugin.cxx +++ b/src/output/plugins/AlsaOutputPlugin.cxx @@ -33,6 +33,7 @@ #include "util/RuntimeError.hxx" #include "util/Domain.hxx" #include "util/ConstBuffer.hxx" +#include "util/ScopeExit.hxx" #include "util/StringView.hxx" #include "event/MultiSocketMonitor.hxx" #include "event/DeferEvent.hxx" @@ -738,14 +739,15 @@ AlsaOutput::DrainInternal() noexcept /* .. and finally drain the ALSA hardware buffer */ + int result; if (work_around_drain_bug) { snd_pcm_nonblock(pcm, 0); - bool result = snd_pcm_drain(pcm) != -EAGAIN; + result = snd_pcm_drain(pcm); snd_pcm_nonblock(pcm, 1); - return result; - } + } else + result = snd_pcm_drain(pcm); - return snd_pcm_drain(pcm) != -EAGAIN; + return result != -EAGAIN; } void