Browse Source

🧹 Fix a TSAN warning in DuplicateSound

This is likely a false positive from TSAN but good to fix nevertheless

Fixes #1849
pull/1870/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
0f95c3cbac
  1. 15
      Source/sound.cpp

15
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;
}

Loading…
Cancel
Save