Skip to content

Assertion when starting a new Classic Doom game #461

@DanielGibson

Description

@DanielGibson

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions