Rob Shearman : ole32: Don' t release the registered drop targets in OleUninitialize.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Apr 5 06:42:55 CDT 2007


Module: wine
Branch: master
Commit: 63ea015c65e517979b01c8de2e744517fe05c36b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=63ea015c65e517979b01c8de2e744517fe05c36b

Author: Rob Shearman <rob at codeweavers.com>
Date:   Thu Apr  5 11:33:52 2007 +0100

ole32: Don't release the registered drop targets in OleUninitialize.

Do it in DLL_PROCESS_DETACH instead.

---

 dlls/ole32/compobj.c         |    1 +
 dlls/ole32/compobj_private.h |    2 ++
 dlls/ole32/ole2.c            |    8 +-------
 dlls/ole32/tests/dragdrop.c  |    2 --
 4 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 330b8e1..af43074 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -3402,6 +3402,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
 
     case DLL_PROCESS_DETACH:
         if (TRACE_ON(ole)) CoRevokeMallocSpy();
+        OLEDD_UnInitialize();
         COMPOBJ_UninitProcess();
         RPC_UnregisterAllChannelHooks();
         OLE32_hInstance = 0;
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h
index 4a81c91..479cd76 100644
--- a/dlls/ole32/compobj_private.h
+++ b/dlls/ole32/compobj_private.h
@@ -242,6 +242,8 @@ HRESULT WINAPI RunningObjectTableImpl_UnInitialize(void);
 /* This function decomposes a String path to a String Table containing all the elements ("\" or "subDirectory" or "Directory" or "FileName") of the path */
 int FileMonikerImpl_DecomposePath(LPCOLESTR str, LPOLESTR** stringTable);
 
+/* Drag and drop */
+void OLEDD_UnInitialize(void);
 
 /* Apartment Functions */
 
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 1f2c301..908eb09 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -147,7 +147,6 @@ extern void OLEClipbrd_Initialize(void);
  * These are the prototypes of the utility methods used for OLE Drag n Drop
  */
 static void            OLEDD_Initialize(void);
-static void            OLEDD_UnInitialize(void);
 static DropTargetNode* OLEDD_FindDropTarget(
                          HWND hwndOfTarget);
 static void            OLEDD_FreeDropTarget(DropTargetNode*);
@@ -254,11 +253,6 @@ void WINAPI OleUninitialize(void)
     OLEClipbrd_UnInitialize();
 
     /*
-     * Drag and Drop
-     */
-    OLEDD_UnInitialize();
-
-    /*
      * OLE shared menu
      */
     OLEMenu_UnInitialize();
@@ -1915,7 +1909,7 @@ static void OLEDD_FreeDropTarget(DropTargetNode *dropTargetInfo)
  *
  * Releases the OLE drag and drop data structures.
  */
-static void OLEDD_UnInitialize(void)
+void OLEDD_UnInitialize(void)
 {
   /*
    * Simply empty the list.
diff --git a/dlls/ole32/tests/dragdrop.c b/dlls/ole32/tests/dragdrop.c
index 6401c11..48b308c 100644
--- a/dlls/ole32/tests/dragdrop.c
+++ b/dlls/ole32/tests/dragdrop.c
@@ -136,11 +136,9 @@ START_TEST(dragdrop)
 
     ok(droptarget_release_called == 0, "DropTarget_Release shouldn't have been called\n");
     OleUninitialize();
-    todo_wine
     ok(droptarget_release_called == 0, "DropTarget_Release shouldn't have been called\n");
 
     hr = RevokeDragDrop(GetDesktopWindow());
-    todo_wine
     ok_ole_success(hr, "RevokeDragDrop");
     ok(droptarget_release_called == 1, "DropTarget_Release should have been called once, not %d times\n", droptarget_release_called);
 




More information about the wine-cvs mailing list