Skip to content
Snippets Groups Projects
Unverified Commit e12a0707 authored by bunnei's avatar bunnei Committed by GitHub
Browse files

Merge pull request #1038 from MerryMage/lock-cubeb

cubeb_sink: Protect queue with a mutex
parents 4cafc24a fcc5ffdf
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <algorithm> #include <algorithm>
#include <cstring> #include <cstring>
#include <mutex>
#include "audio_core/cubeb_sink.h" #include "audio_core/cubeb_sink.h"
#include "audio_core/stream.h" #include "audio_core/stream.h"
...@@ -66,6 +67,8 @@ public: ...@@ -66,6 +67,8 @@ public:
return; return;
} }
std::lock_guard lock{queue_mutex};
queue.reserve(queue.size() + samples.size() * GetNumChannels()); queue.reserve(queue.size() + samples.size() * GetNumChannels());
if (is_6_channel) { if (is_6_channel) {
...@@ -94,6 +97,7 @@ private: ...@@ -94,6 +97,7 @@ private:
u32 num_channels{}; u32 num_channels{};
bool is_6_channel{}; bool is_6_channel{};
std::mutex queue_mutex;
std::vector<s16> queue; std::vector<s16> queue;
static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, 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,6 +157,8 @@ long SinkStreamImpl::DataCallback(cubeb_stream* stream, void* user_data, const v
return {}; return {};
} }
std::lock_guard lock{impl->queue_mutex};
const size_t frames_to_write{ const size_t frames_to_write{
std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))}; std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment