summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/AlsaSoundStream.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2019-04-06 17:39:25 -0500
committerJordan Woyak <jordan.woyak@gmail.com>2019-04-06 17:39:25 -0500
commitd34a9afe049d9b800a4ce70158091427cdb958be (patch)
treefb93910a08da48125c81c7e14e595fd0a40a7147 /Source/Core/AudioCommon/AlsaSoundStream.cpp
parent75e74315e69df1dc03bbda4373528e9e26274d7d (diff)
Minor changes to usages of std::condition_variable.
Diffstat (limited to 'Source/Core/AudioCommon/AlsaSoundStream.cpp')
-rw-r--r--Source/Core/AudioCommon/AlsaSoundStream.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/Source/Core/AudioCommon/AlsaSoundStream.cpp b/Source/Core/AudioCommon/AlsaSoundStream.cpp
index 3d20331abd..d249640d1b 100644
--- a/Source/Core/AudioCommon/AlsaSoundStream.cpp
+++ b/Source/Core/AudioCommon/AlsaSoundStream.cpp
@@ -19,6 +19,9 @@ AlsaSound::~AlsaSound()
{
m_thread_status.store(ALSAThreadStatus::STOPPING);
+ // Immediately lock and unlock mutex to prevent cv race.
+ std::unique_lock<std::mutex>{cv_m};
+
// Give the opportunity to the audio thread
// to realize we are stopping the emulation
cv.notify_one();
@@ -81,7 +84,12 @@ void AlsaSound::SoundLoop()
bool AlsaSound::SetRunning(bool running)
{
m_thread_status.store(running ? ALSAThreadStatus::RUNNING : ALSAThreadStatus::PAUSED);
- cv.notify_one(); // Notify thread that status has changed
+
+ // Immediately lock and unlock mutex to prevent cv race.
+ std::unique_lock<std::mutex>{cv_m};
+
+ // Notify thread that status has changed
+ cv.notify_one();
return true;
}