-
Notifications
You must be signed in to change notification settings - Fork 396
Description
Assertion in idSampleDecoderLocal::DecodeOGG():
if ( sample->nonCacheData == NULL ) {
assert( false ); // this should never happen
...backtrace
AssertFailed() at .../neo/idlib/Lib.cpp:521 0x5555558ac04a
idSampleDecoderLocal::DecodeOGG() at .../neo/sound/snd_decoder.cpp:536 0x555555789283
idSampleDecoderLocal::Decode() at .../neo/sound/snd_decoder.cpp:462 0x555555788f85
idSoundChannel::GatherChannelSamples() at .../neo/sound/snd_emitter.cpp:295 0x55555578cdae
idSoundWorldLocal::AddChannelContribution() at .../neo/sound/snd_world.cpp:1,918 0x55555579f543
idSoundWorldLocal::MixLoop() at .../neo/sound/snd_world.cpp:602 0x55555579a284
idSoundSystemLocal::AsyncUpdateWrite() at .../neo/sound/snd_system.cpp:817 0x555555794161
idCommonLocal::SingleAsyncTic() at .../neo/framework/Common.cpp:2,533 0x5555556740ba
idCommonLocal::Async() at .../neo/framework/Common.cpp:2,586 0x55555567420c
AsyncTimer() at .../neo/framework/Common.cpp:2,777 0x555555674a3e
...
Reproduction: ./dhewm3 +set fs_basepath ../../doom3data/ +set fs_game cdoom -> New Game -> Hurt Me Plenty (or whatever)
The soundsample is sound/music/cdoomtheme.ogg (the menu music), it has previously been purged via
idSessionLocal::ExecuteMapChange() -> idSoundSystemLocal::EndLevelLoad() -> idSoundCache::EndLevelLoad()
This bug didn't happen (or at least I can't reproduce it, maybe it happens less often) in 1.5.0 or when setting com_asyncSound 2 which reduces the sound update frequency (how often MixLoop() is called) to 10 times per second instead of 60 times per second.
So it might be some kind of race condition?
I'll continue investigating, currently this is holding up releasing 1.5.2 RC2