Maarten Lankhorst schrieb: > This fixes an interesting deadlock with the alsa driver: > > DSOUND_Stop is called, message is added to thread queue. > DSOUND_Release is called, message is added to thread queue. > > Both are fast messages, so second is added before first.
But this only works if DSOUND_Stop and DSOUND_Release are called from different threads, right? > > thread reads: We're going down! And terminates. > > DSOUND_Stop's message is never read and it waits till eternity, so > starting/stopping never occurs any more. Isn't the real problem that when ALSA_DestroyRingMessage(*) is called from IDsDriverBuffer_Release it doesn't check if there are still any "fast messages" in the queue which wait for their message to be handled? Just from a quick look it seems you could theoretically trigger the same deadlock with the WODM_RESET & WODM_CLOSE messages when using the waveout system. (*) probably affects all other sound drivers as well which use this (horrible complex) message ring buffer system.