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