Cmd line: -m and -no-mb: fix crash

This commit is contained in:
tomcw 2019-11-03 14:23:47 +00:00
parent 5792107dce
commit d92eca5068
2 changed files with 9 additions and 0 deletions

View File

@ -1447,6 +1447,11 @@ void MB_InitializeForLoadingSnapshot() // GH#609
{
MB_Reset();
InitSoundcardType();
if (g_bDisableDirectSound || g_bDisableDirectSoundMockingboard)
return;
_ASSERT(MockingboardVoice.lpDSBvoice);
MockingboardVoice.lpDSBvoice->Stop(); // Reason: 'MB voice is playing' then loading a save-state where 'no MB present'
}
@ -1701,6 +1706,9 @@ void MB_InitializeIO(LPBYTE pCxRomPeripheral, UINT uSlot4, UINT uSlot5)
MB_SetSoundcardType(g_Slot[4]);
if (g_bDisableDirectSound || g_bDisableDirectSoundMockingboard)
return;
// Sound buffer may have been stopped by MB_InitializeForLoadingSnapshot().
// NB. DSZeroVoiceBuffer() also zeros the sound buffer, so it's better than directly calling IDirectSoundBuffer::Play():
// - without zeroing, then the previous sound buffer can be heard for a fraction of a second

View File

@ -235,6 +235,7 @@ bool DSZeroVoiceBuffer(PVOICE Voice, char* pszDevName, DWORD dwBufferSize)
DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer
SHORT* pDSLockedBuffer;
_ASSERT(Voice->lpDSBvoice);
HRESULT hr = Voice->lpDSBvoice->Stop();
if(FAILED(hr))
{