From 0f95c3cbac1ff4ddf7cf967d0a16fd0edaf65683 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Mon, 3 May 2021 15:57:37 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20Fix=20a=20TSAN=20warning=20in=20?= =?UTF-8?q?DuplicateSound?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is likely a false positive from TSAN but good to fix nevertheless Fixes #1849 --- Source/sound.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Source/sound.cpp b/Source/sound.cpp index 859daafbf..55afb753f 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -76,16 +76,17 @@ SoundSample *DuplicateSound(const SoundSample &sound) { if (duplicate->DuplicateFrom(sound) != 0) return nullptr; auto *result = duplicate.get(); + decltype(duplicateSounds.begin()) it; { SDLMutexLockGuard lock(duplicateSoundsMutex.get()); duplicateSounds.push_back(std::move(duplicate)); - auto it = duplicateSounds.end(); + it = duplicateSounds.end(); --it; - result->SetFinishCallback([it](Aulib::Stream &stream) { - SDLMutexLockGuard lock(duplicateSoundsMutex.get()); - duplicateSounds.erase(it); - }); } + result->SetFinishCallback([it]([[maybe_unused]] Aulib::Stream &stream) { + SDLMutexLockGuard lock(duplicateSoundsMutex.get()); + duplicateSounds.erase(it); + }); return result; } @@ -144,8 +145,8 @@ void snd_play_snd(TSnd *pSnd, int lVolume, int lPan) } SoundSample *sound = &pSnd->DSB; - if (pSnd->DSB.IsPlaying()) { - sound = DuplicateSound(pSnd->DSB); + if (sound->IsPlaying()) { + sound = DuplicateSound(*sound); if (sound == nullptr) return; }