From 9b801227d5108f9b74bf94df49e7c341f0809c94 Mon Sep 17 00:00:00 2001
From: Chris Robinson <chris.kcat@gmail.com>
Date: Fri, 21 Feb 2020 00:54:05 -0800
Subject: Don't unnecessarily count all voices when playing sources

---
 al/source.cpp | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

(limited to 'al/source.cpp')

diff --git a/al/source.cpp b/al/source.cpp
index 2b474e89..d62649b6 100644
--- a/al/source.cpp
+++ b/al/source.cpp
@@ -2725,17 +2725,16 @@ START_API_FUNC
     }
 
     /* Count the number of reusable voices. */
-    auto count_free_voices = [](const ALuint count, const ALvoice &voice) noexcept -> ALuint
+    size_t free_voices{0};
+    for(const ALvoice &voice : context->mVoices)
     {
-        if(voice.mPlayState.load(std::memory_order_acquire) == ALvoice::Stopped
+        free_voices += (voice.mPlayState.load(std::memory_order_acquire) == ALvoice::Stopped
             && voice.mSourceID.load(std::memory_order_relaxed) == 0u
-            && voice.mPendingStop.load(std::memory_order_relaxed) == false)
-            return count + 1;
-        return count;
-    };
-    auto free_voices = std::accumulate(context->mVoices.begin(), context->mVoices.end(),
-        ALuint{0}, count_free_voices);
-    if UNLIKELY(srchandles.size() > free_voices)
+            && voice.mPendingStop.load(std::memory_order_relaxed) == false);
+        if(free_voices == srchandles.size())
+            break;
+    }
+    if UNLIKELY(srchandles.size() != free_voices)
     {
         /* Increase the number of voices to handle the request. */
         const size_t need_voices{srchandles.size() - free_voices};
-- 
cgit v1.2.3