Module: wine Branch: master Commit: 1fe904bd08b26b0f0548b77f9b1d7ef3c00a5509 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1fe904bd08b26b0f0548b77f9b...
Author: Andrew Nguyen anguyen@codeweavers.com Date: Tue Feb 1 04:32:34 2011 -0600
dxdiagn: Avoid caching a single instance of the root container.
---
dlls/dxdiagn/dxdiag_private.h | 1 - dlls/dxdiagn/provider.c | 19 +++++++++++-------- dlls/dxdiagn/tests/provider.c | 9 ++++++++- 3 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/dlls/dxdiagn/dxdiag_private.h b/dlls/dxdiagn/dxdiag_private.h index 58de882..ba48c14 100644 --- a/dlls/dxdiagn/dxdiag_private.h +++ b/dlls/dxdiagn/dxdiag_private.h @@ -48,7 +48,6 @@ struct IDxDiagProviderImpl { /* IDxDiagProvider fields */ BOOL init; DXDIAG_INIT_PARAMS params; - IDxDiagContainer* pRootContainer; };
/* ---------------- */ diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c index 428c7ef..0734241 100644 --- a/dlls/dxdiagn/provider.c +++ b/dlls/dxdiagn/provider.c @@ -107,21 +107,24 @@ static HRESULT WINAPI IDxDiagProviderImpl_Initialize(PDXDIAGPROVIDER iface, DXDI }
static HRESULT WINAPI IDxDiagProviderImpl_GetRootContainer(PDXDIAGPROVIDER iface, IDxDiagContainer** ppInstance) { - HRESULT hr = S_OK; + HRESULT hr; IDxDiagProviderImpl *This = (IDxDiagProviderImpl *)iface; + IDxDiagContainer *root; + TRACE("(%p,%p)\n", iface, ppInstance);
if (FALSE == This->init) { return CO_E_NOTINITIALIZED; } - if (NULL == This->pRootContainer) { - hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void**) &This->pRootContainer); - if (FAILED(hr)) { - return hr; - } - hr = DXDiag_InitRootDXDiagContainer(This->pRootContainer); + + hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, (void **)&root); + if (FAILED(hr)) { + return hr; } - return IDxDiagContainerImpl_QueryInterface((PDXDIAGCONTAINER)This->pRootContainer, &IID_IDxDiagContainer, (void**) ppInstance); + + DXDiag_InitRootDXDiagContainer(root); + + return IDxDiagContainerImpl_QueryInterface(root, &IID_IDxDiagContainer, (void **)ppInstance); }
static const IDxDiagProviderVtbl DxDiagProvider_Vtbl = diff --git a/dlls/dxdiagn/tests/provider.c b/dlls/dxdiagn/tests/provider.c index 0aa228b..69006f0 100644 --- a/dlls/dxdiagn/tests/provider.c +++ b/dlls/dxdiagn/tests/provider.c @@ -94,7 +94,7 @@ static void test_GetRootContainer(void) { HRESULT hr; IDxDiagProvider *pddp; - IDxDiagContainer *pddc; + IDxDiagContainer *pddc, *pddc2; DXDIAG_INIT_PARAMS params;
hr = CoCreateInstance(&CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, @@ -140,6 +140,13 @@ static void test_GetRootContainer(void) hr = IDxDiagProvider_GetRootContainer(pddp, &pddc); ok(hr == S_OK, "Expected IDxDiagProvider::GetRootContainer to return S_OK, got %x\n", hr);
+ /* IDxDiagProvider::GetRootContainer creates new instances of the root + * container rather than maintain a static root container. */ + hr = IDxDiagProvider_GetRootContainer(pddp, &pddc2); + ok(hr == S_OK, "Expected IDxDiagProvider::GetRootContainer to return S_OK, got %x\n", hr); + ok(pddc != pddc2, "Expected the two pointers (%p vs. %p) to be unequal\n", pddc, pddc2); + + IDxDiagContainer_Release(pddc2); IDxDiagContainer_Release(pddc); IDxDiagProvider_Release(pddp); }