diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/header.c b/reactos/lib/drivers/sound/mmebuddy/wave/header.c index ac1c99bf434..bf5b80b6496 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/header.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/header.c @@ -248,10 +248,18 @@ EnqueueWaveHeader( { /* There are already queued headers - make this one the tail */ SND_TRACE(L"Enqueued next wave header\n"); - SoundDeviceInstance->TailWaveHeader->lpNext = WaveHeader; - SoundDeviceInstance->TailWaveHeader = WaveHeader; - DoWaveStreaming(SoundDeviceInstance); + /* FIXME - Make sure that the buffer has not already been added to the list */ + if ( SoundDeviceInstance->TailWaveHeader != WaveHeader ) + { + SND_ASSERT(SoundDeviceInstance->TailWaveHeader != WaveHeader); + + SoundDeviceInstance->TailWaveHeader->lpNext = WaveHeader; + SoundDeviceInstance->TailWaveHeader = WaveHeader; + DUMP_WAVEHDR_QUEUE(SoundDeviceInstance); + + DoWaveStreaming(SoundDeviceInstance); + } } DUMP_WAVEHDR_QUEUE(SoundDeviceInstance); diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c index f910bf96c96..a28093359b5 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c @@ -77,6 +77,7 @@ DoWaveStreaming( { { /* Move on to the next header */ + SND_ASSERT(Header != Header->lpNext); Header = Header->lpNext; } } @@ -209,9 +210,9 @@ CompleteIO( } else { - SND_TRACE(L"%d/%d bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength); /* Partially completed */ HdrExtension->BytesCompleted += dwNumberOfBytesTransferred; + SND_TRACE(L"%d/%d bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength); break; }