Module: wine Branch: refs/heads/master Commit: e68e6d7dba3e4ed4b8efe3e52135c493fcf89bab URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e68e6d7dba3e4ed4b8efe3e5...
Author: Robert Shearman rob@codeweavers.com Date: Mon May 8 12:38:44 2006 +0100
ole32: Release all existing monikers before loading the state.
---
dlls/ole32/compositemoniker.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c index 989152a..5096d0d 100644 --- a/dlls/ole32/compositemoniker.c +++ b/dlls/ole32/compositemoniker.c @@ -137,6 +137,16 @@ CompositeMonikerImpl_AddRef(IMoniker* if return InterlockedIncrement(&This->ref); }
+static void CompositeMonikerImpl_ReleaseMonikersInTable(CompositeMonikerImpl *This) +{ + ULONG i; + + for (i = 0; i < This->tabLastIndex; i++) + IMoniker_Release(This->tabMoniker[i]); + + This->tabLastIndex = 0; +} + /****************************************************************************** * CompositeMoniker_Release ******************************************************************************/ @@ -144,7 +154,6 @@ static ULONG WINAPI CompositeMonikerImpl_Release(IMoniker* iface) { CompositeMonikerImpl *This = (CompositeMonikerImpl *)iface; - ULONG i; ULONG ref;
TRACE("(%p)\n",This); @@ -155,8 +164,7 @@ CompositeMonikerImpl_Release(IMoniker* i if (ref == 0){
/* release all the components before destroying this object */ - for (i=0;i<This->tabLastIndex;i++) - IMoniker_Release(This->tabMoniker[i]); + CompositeMonikerImpl_ReleaseMonikersInTable(This);
HeapFree(GetProcessHeap(),0,This->tabMoniker); HeapFree(GetProcessHeap(),0,This); @@ -218,6 +226,8 @@ CompositeMonikerImpl_Load(IMoniker* ifac return E_FAIL; }
+ CompositeMonikerImpl_ReleaseMonikersInTable(This); + for (i = 0; i < moniker_count; i++) { res=OleLoadFromStream(pStm,&IID_IMoniker,(void**)&This->tabMoniker[This->tabLastIndex]);