mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-03-21 17:49:58 -05:00
WASAPIStream: Fix crash when GetBuffer call fails
Check the return value of calls to `GetBuffer` and stop the `WASAPI handler` sound thread if they fail. This prevents a crash due to a null pointer dereference if `GetBuffer` is unable to retrieve a buffer, which could be triggered during emulation by disabling the selected WASAPI output device in the Windows Sound settings.
This commit is contained in:
parent
7a45ede688
commit
e8a78ed95f
|
|
@ -320,14 +320,24 @@ void WASAPIStream::SoundLoop()
|
|||
Common::SetCurrentThreadName("WASAPI Handler");
|
||||
BYTE* data;
|
||||
|
||||
m_audio_renderer->GetBuffer(m_frames_in_buffer, &data);
|
||||
HRESULT getbuffer_result = m_audio_renderer->GetBuffer(m_frames_in_buffer, &data);
|
||||
if (getbuffer_result != S_OK)
|
||||
{
|
||||
m_running.store(false, std::memory_order_relaxed);
|
||||
return;
|
||||
}
|
||||
m_audio_renderer->ReleaseBuffer(m_frames_in_buffer, AUDCLNT_BUFFERFLAGS_SILENT);
|
||||
|
||||
while (m_running.load(std::memory_order_relaxed))
|
||||
{
|
||||
WaitForSingleObject(m_need_data_event.get(), 1000);
|
||||
|
||||
m_audio_renderer->GetBuffer(m_frames_in_buffer, &data);
|
||||
getbuffer_result = m_audio_renderer->GetBuffer(m_frames_in_buffer, &data);
|
||||
if (getbuffer_result != S_OK)
|
||||
{
|
||||
m_running.store(false, std::memory_order_relaxed);
|
||||
return;
|
||||
}
|
||||
|
||||
s16* audio_data = reinterpret_cast<s16*>(data);
|
||||
GetMixer()->Mix(audio_data, m_frames_in_buffer);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user