From a370d287c3db5fad8c5e2d9fd2af56d312d19bc1 Mon Sep 17 00:00:00 2001
From: Simon Walton <simon@highfidelity.io>
Date: Wed, 4 Apr 2018 16:42:10 -0700
Subject: [PATCH] Change AudioRingBuffer.cpp to use std::call_once

---
 libraries/audio/src/AudioRingBuffer.cpp | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/libraries/audio/src/AudioRingBuffer.cpp b/libraries/audio/src/AudioRingBuffer.cpp
index 683211aac6..8f41ca8947 100644
--- a/libraries/audio/src/AudioRingBuffer.cpp
+++ b/libraries/audio/src/AudioRingBuffer.cpp
@@ -153,7 +153,7 @@ int AudioRingBufferTemplate<T>::appendData(char *data, int maxSize) {
 
 namespace {
     int repeatedOverflowMessageID = 0;
-    std::atomic<int> messageIDInit = 0;
+    std::once_flag messageIDFlag;
 }
 
 template <class T>
@@ -169,9 +169,8 @@ int AudioRingBufferTemplate<T>::writeData(const char* data, int maxSize) {
         _nextOutput = shiftedPositionAccomodatingWrap(_nextOutput, samplesToDelete);
         _overflowCount++;
 
-        if (++messageIDInit == 1) {
-            repeatedOverflowMessageID = LogHandler::getInstance().newRepeatedMessageID();
-        }
+        std::call_once(messageIDFlag, [](int& id) { id = LogHandler::getInstance().newRepeatedMessageID(); },
+            repeatedOverflowMessageID);
         HIFI_FCDEBUG_ID(audio(), repeatedOverflowMessageID, RING_BUFFER_OVERFLOW_DEBUG);
     }
 
@@ -281,9 +280,8 @@ int AudioRingBufferTemplate<T>::writeSamples(ConstIterator source, int maxSample
         _nextOutput = shiftedPositionAccomodatingWrap(_nextOutput, samplesToDelete);
         _overflowCount++;
 
-        if (++messageIDInit == 1) {
-            repeatedOverflowMessageID = LogHandler::getInstance().newRepeatedMessageID();
-        }
+        std::call_once(messageIDFlag, [](int& id) { id = LogHandler::getInstance().newRepeatedMessageID(); },
+            repeatedOverflowMessageID);
         HIFI_FCDEBUG_ID(audio(), repeatedOverflowMessageID, RING_BUFFER_OVERFLOW_DEBUG);
     }
 
@@ -307,9 +305,8 @@ int AudioRingBufferTemplate<T>::writeSamplesWithFade(ConstIterator source, int m
         _nextOutput = shiftedPositionAccomodatingWrap(_nextOutput, samplesToDelete);
         _overflowCount++;
 
-        if (++messageIDInit == 1) {
-            repeatedOverflowMessageID = LogHandler::getInstance().newRepeatedMessageID();
-        }
+        std::call_once(messageIDFlag, [](int& id) { id = LogHandler::getInstance().newRepeatedMessageID(); },
+            repeatedOverflowMessageID);
         HIFI_FCDEBUG_ID(audio(), repeatedOverflowMessageID, RING_BUFFER_OVERFLOW_DEBUG);
     }