Robert Shearman : ole32:
Release all existing monikers before loading the state.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon May 8 09:06:09 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: e68e6d7dba3e4ed4b8efe3e52135c493fcf89bab
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e68e6d7dba3e4ed4b8efe3e52135c493fcf89bab
Author: Robert Shearman <rob at 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]);
More information about the wine-cvs
mailing list