From ecadabe25b11bbd2bb41facf40dfc592e12632ad Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Tue, 9 Feb 2016 10:39:23 -0600 Subject: [PATCH] xaudio2: Handle openal source allocation failure. Signed-off-by: Andrew Eikum Signed-off-by: Alexandre Julliard --- dlls/xaudio2_7/xaudio_dll.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c index 32bc1c892ee..6d766a1ca45 100644 --- a/dlls/xaudio2_7/xaudio_dll.c +++ b/dlls/xaudio2_7/xaudio_dll.c @@ -32,6 +32,7 @@ #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(xaudio2); +WINE_DECLARE_DEBUG_CHANNEL(winediag); static ALCdevice *(ALC_APIENTRY *palcLoopbackOpenDeviceSOFT)(const ALCchar*); static void (ALC_APIENTRY *palcRenderSamplesSOFT)(ALCdevice*, ALCvoid*, ALCsizei); @@ -1415,11 +1416,21 @@ static HRESULT WINAPI IXAudio2Impl_CreateSourceVoice(IXAudio2 *iface, hr = XA2SRC_SetOutputVoices(&src->IXAudio2SourceVoice_iface, pSendList); if(FAILED(hr)){ + HeapFree(GetProcessHeap(), 0, src->fmt); src->in_use = FALSE; return hr; } alGenSources(1, &src->al_src); + if(!src->al_src){ + static int once = 0; + if(!once++) + ERR_(winediag)("OpenAL ran out of sources, consider increasing its source limit.\n"); + HeapFree(GetProcessHeap(), 0, src->fmt); + src->in_use = FALSE; + return E_OUTOFMEMORY; + } + alGenBuffers(XAUDIO2_MAX_QUEUED_BUFFERS, src->al_bufs); alSourcePlay(src->al_src);