Rob Shearman : ole32: Add test for CoLockObjectExternal with fLastUnlockReleases as FALSE.
Alexandre Julliard
julliard at winehq.org
Tue Nov 24 12:40:21 CST 2009
Module: wine
Branch: master
Commit: bcf0be6a995f5b336d7287d9111336ff531a7755
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bcf0be6a995f5b336d7287d9111336ff531a7755
Author: Rob Shearman <robertshearman at gmail.com>
Date: Mon Nov 23 15:07:20 2009 +0000
ole32: Add test for CoLockObjectExternal with fLastUnlockReleases as FALSE.
---
dlls/ole32/tests/marshal.c | 38 +++++++++++++++++++++++++++++++++++++-
1 files changed, 37 insertions(+), 1 deletions(-)
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 4239b55..93fd9a6 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -1257,7 +1257,7 @@ static void test_lock_object_external(void)
IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
hr = CoReleaseMarshalData(pStream);
ok_ole_success(hr, CoReleaseMarshalData);
- IStream_Release(pStream);
+ IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
ok_more_than_one_lock();
@@ -1268,6 +1268,42 @@ static void test_lock_object_external(void)
CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, TRUE);
ok_no_locks();
+
+ /* test CoLockObjectExternal releases reference to object with
+ * fLastUnlockReleases as TRUE and there are only strong references on
+ * the object */
+ CoLockObjectExternal((IUnknown*)&Test_ClassFactory, TRUE, FALSE);
+
+ ok_more_than_one_lock();
+
+ CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, FALSE);
+
+ todo_wine
+ ok_no_locks();
+ if (cLocks > 0)
+ CoDisconnectObject((IUnknown*)&Test_ClassFactory, 0);
+
+ /* test CoLockObjectExternal doesn't release the last reference to an
+ * object with fLastUnlockReleases as TRUE and there is a weak reference
+ * on the object */
+ hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLEWEAK);
+ ok_ole_success(hr, CoMarshalInterface);
+
+ ok_more_than_one_lock();
+
+ CoLockObjectExternal((IUnknown*)&Test_ClassFactory, TRUE, FALSE);
+
+ ok_more_than_one_lock();
+
+ CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, FALSE);
+
+ ok_more_than_one_lock();
+
+ CoDisconnectObject((IUnknown*)&Test_ClassFactory, 0);
+
+ ok_no_locks();
+
+ IStream_Release(pStream);
}
/* tests disconnecting stubs */
More information about the wine-cvs
mailing list