From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com --- dlls/xactengine3_7/xact_dll.c | 67 +++++++++++++++++------------------ 1 file changed, 33 insertions(+), 34 deletions(-)
diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c index ee559dd4b07..a06ca67ad8d 100644 --- a/dlls/xactengine3_7/xact_dll.c +++ b/dlls/xactengine3_7/xact_dll.c @@ -114,6 +114,33 @@ static void wrapper_remove_entry(XACT3EngineImpl *engine, void *key) } }
+static HRESULT wrapper_add_entry(XACT3EngineImpl *engine, void *fact, void *xact) +{ + struct wrapper_lookup *lookup; + UINT ret; + + lookup = HeapAlloc(GetProcessHeap(), 0, sizeof(*lookup)); + if (!lookup) + { + ERR("Failed to allocate wrapper_lookup!\n"); + return E_OUTOFMEMORY; + } + lookup->fact = fact; + lookup->xact = xact; + + EnterCriticalSection(&engine->wb_wrapper_lookup_cs); + ret = wine_rb_put(&engine->wb_wrapper_lookup, lookup->fact, &lookup->entry); + LeaveCriticalSection(&engine->wb_wrapper_lookup_cs); + + if (ret) + { + WARN("wrapper_lookup already present in the tree??\n"); + HeapFree(GetProcessHeap(), 0, lookup); + } + + return S_OK; +} + typedef struct _XACT3CueImpl { IXACT3Cue IXACT3Cue_iface; FACTCue *fact_cue; @@ -1095,9 +1122,9 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac DWORD dwAllocAttributes, IXACT3WaveBank **ppWaveBank) { XACT3EngineImpl *This = impl_from_IXACT3Engine(iface); - struct wrapper_lookup *lookup; XACT3WaveBankImpl *wb; FACTWaveBank *fwb; + HRESULT hr; UINT ret;
TRACE("(%p)->(%p, %lu, 0x%lx, 0x%lx, %p)\n", This, pvBuffer, dwSize, dwFlags, @@ -1119,28 +1146,14 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac return E_OUTOFMEMORY; }
- lookup = HeapAlloc(GetProcessHeap(), 0, sizeof(*lookup)); - if (!lookup) + hr = wrapper_add_entry(This, fwb, &wb->IXACT3WaveBank_iface); + if (FAILED(hr)) { FACTWaveBank_Destroy(fwb); HeapFree(GetProcessHeap(), 0, wb); ERR("Failed to allocate wrapper_lookup!\n"); return E_OUTOFMEMORY; } - lookup->fact = fwb; - lookup->xact = &wb->IXACT3WaveBank_iface; - - EnterCriticalSection(&This->wb_wrapper_lookup_cs); - - ret = wine_rb_put(&This->wb_wrapper_lookup, lookup->fact, &lookup->entry); - - LeaveCriticalSection(&This->wb_wrapper_lookup_cs); - - if (ret) - { - WARN("wrapper_lookup already present in the tree??\n"); - HeapFree(GetProcessHeap(), 0, lookup); - }
wb->IXACT3WaveBank_iface.lpVtbl = &XACT3WaveBank_Vtbl; wb->fact_wavebank = fwb; @@ -1158,11 +1171,11 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *ifa { XACT3EngineImpl *This = impl_from_IXACT3Engine(iface); FACTStreamingParameters fakeParms; - struct wrapper_lookup *lookup; wrap_readfile_struct *fake; XACT3WaveBankImpl *wb; FACTWaveBank *fwb; UINT ret; + HRESULT hr;
TRACE("(%p)->(%p, %p)\n", This, pParms, ppWaveBank);
@@ -1192,28 +1205,14 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *ifa return E_OUTOFMEMORY; }
- lookup = HeapAlloc(GetProcessHeap(), 0, sizeof(*lookup)); - if (!lookup) + hr = wrapper_add_entry(This, fwb, &wb->IXACT3WaveBank_iface); + if (FAILED(hr)) { FACTWaveBank_Destroy(fwb); HeapFree(GetProcessHeap(), 0, wb); ERR("Failed to allocate wrapper_lookup!\n"); return E_OUTOFMEMORY; } - lookup->fact = fwb; - lookup->xact = &wb->IXACT3WaveBank_iface; - - EnterCriticalSection(&This->wb_wrapper_lookup_cs); - - ret = wine_rb_put(&This->wb_wrapper_lookup, lookup->fact, &lookup->entry); - - LeaveCriticalSection(&This->wb_wrapper_lookup_cs); - - if (ret) - { - WARN("wrapper_lookup already present in the tree??\n"); - HeapFree(GetProcessHeap(), 0, lookup); - }
wb->IXACT3WaveBank_iface.lpVtbl = &XACT3WaveBank_Vtbl; wb->fact_wavebank = fwb;