diff options
| author | 2018-08-12 20:41:46 +0100 | |
|---|---|---|
| committer | 2018-08-12 20:41:46 +0100 | |
| commit | fcc5ffdfddee85e59e36621bbc8a1c3cb797ca51 (patch) | |
| tree | b97ab6591a3f689a786740e8897b249da8130077 | |
| parent | Merge pull request #1028 from ogniK5377/aoa (diff) | |
| download | yuzu-fcc5ffdfddee85e59e36621bbc8a1c3cb797ca51.tar.gz yuzu-fcc5ffdfddee85e59e36621bbc8a1c3cb797ca51.tar.xz yuzu-fcc5ffdfddee85e59e36621bbc8a1c3cb797ca51.zip | |
cubeb_sink: Protect queue with a mutex
| -rw-r--r-- | src/audio_core/cubeb_sink.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/audio_core/cubeb_sink.cpp b/src/audio_core/cubeb_sink.cpp index 1501ef1f4..5a1177d0c 100644 --- a/src/audio_core/cubeb_sink.cpp +++ b/src/audio_core/cubeb_sink.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #include <algorithm> | 5 | #include <algorithm> |
| 6 | #include <cstring> | 6 | #include <cstring> |
| 7 | #include <mutex> | ||
| 7 | 8 | ||
| 8 | #include "audio_core/cubeb_sink.h" | 9 | #include "audio_core/cubeb_sink.h" |
| 9 | #include "audio_core/stream.h" | 10 | #include "audio_core/stream.h" |
| @@ -66,6 +67,8 @@ public: | |||
| 66 | return; | 67 | return; |
| 67 | } | 68 | } |
| 68 | 69 | ||
| 70 | std::lock_guard lock{queue_mutex}; | ||
| 71 | |||
| 69 | queue.reserve(queue.size() + samples.size() * GetNumChannels()); | 72 | queue.reserve(queue.size() + samples.size() * GetNumChannels()); |
| 70 | 73 | ||
| 71 | if (is_6_channel) { | 74 | if (is_6_channel) { |
| @@ -94,6 +97,7 @@ private: | |||
| 94 | u32 num_channels{}; | 97 | u32 num_channels{}; |
| 95 | bool is_6_channel{}; | 98 | bool is_6_channel{}; |
| 96 | 99 | ||
| 100 | std::mutex queue_mutex; | ||
| 97 | std::vector<s16> queue; | 101 | std::vector<s16> queue; |
| 98 | 102 | ||
| 99 | static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, | 103 | static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, |
| @@ -153,6 +157,8 @@ long SinkStreamImpl::DataCallback(cubeb_stream* stream, void* user_data, const v | |||
| 153 | return {}; | 157 | return {}; |
| 154 | } | 158 | } |
| 155 | 159 | ||
| 160 | std::lock_guard lock{impl->queue_mutex}; | ||
| 161 | |||
| 156 | const size_t frames_to_write{ | 162 | const size_t frames_to_write{ |
| 157 | std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))}; | 163 | std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))}; |
| 158 | 164 | ||