Huw Davies : ole32: Return OLE_E_NOTRUNNING on a cache-miss when the object isn't running.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 14 11:12:50 CDT 2015


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed Oct 14 10:33:49 2015 +0100

ole32: Return OLE_E_NOTRUNNING on a cache-miss when the object isn't running.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ole32/defaulthandler.c | 22 ++++++++++++++++++++--
 dlls/ole32/tests/ole2.c     |  2 --
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/dlls/ole32/defaulthandler.c b/dlls/ole32/defaulthandler.c
index ad79e99..9f6fa2b 100644
--- a/dlls/ole32/defaulthandler.c
+++ b/dlls/ole32/defaulthandler.c
@@ -1021,8 +1021,17 @@ static HRESULT WINAPI DefaultHandler_GetData(
 
   IDataObject_Release(cacheDataObject);
 
-  if (FAILED(hres) && object_is_running( This ))
+  if (hres == S_OK) return hres;
+
+  if (object_is_running( This ))
+  {
     hres = IDataObject_GetData(This->pDataDelegate, pformatetcIn, pmedium);
+    if (hres == S_OK) return hres;
+  }
+
+  /* Query running state again, as the object may have closed during _GetData call */
+  if (!object_is_running( This ))
+    hres = OLE_E_NOTRUNNING;
 
   return hres;
 }
@@ -1067,8 +1076,17 @@ static HRESULT WINAPI DefaultHandler_QueryGetData(
 
   IDataObject_Release(cacheDataObject);
 
-  if (FAILED(hres) && object_is_running( This ))
+  if (hres == S_OK) return hres;
+
+  if (object_is_running( This ))
+  {
     hres = IDataObject_QueryGetData(This->pDataDelegate, pformatetc);
+    if (hres == S_OK) return hres;
+  }
+
+  /* Query running state again, as the object may have closed during _QueryGetData call */
+  if (!object_is_running( This ))
+    hres = OLE_E_NOTRUNNING;
 
   return hres;
 }
diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c
index b297f03..39680af 100644
--- a/dlls/ole32/tests/ole2.c
+++ b/dlls/ole32/tests/ole2.c
@@ -1933,7 +1933,6 @@ static void test_default_handler(void)
     fmtetc.lindex = -1;
     fmtetc.tymed = TYMED_ENHMF;
     hr = IDataObject_QueryGetData(pDataObject, &fmtetc);
-    todo_wine
     ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
 
     fmtetc.cfFormat = CF_TEXT;
@@ -1942,7 +1941,6 @@ static void test_default_handler(void)
     fmtetc.lindex = -1;
     fmtetc.tymed = TYMED_NULL;
     hr = IDataObject_QueryGetData(pDataObject, &fmtetc);
-    todo_wine
     ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
 
     hr = IOleObject_QueryInterface(pObject, &IID_IRunnableObject, (void **)&pRunnableObject);




More information about the wine-cvs mailing list