Module: wine Branch: master Commit: 5077fc895fe98eabd8d511340853db120ad82f06 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5077fc895fe98eabd8d5113408...
Author: Huw Davies huw@codeweavers.com Date: Thu Oct 24 16:16:52 2013 +0100
ole32: If an object exposes IExternalConnection then don't take down the stub manager if we have remaining weak refs in a call that would otherwise ignore them.
---
dlls/ole32/stubmanager.c | 3 ++- dlls/ole32/tests/marshal.c | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/dlls/ole32/stubmanager.c b/dlls/ole32/stubmanager.c index 6e59581..fbbf413 100644 --- a/dlls/ole32/stubmanager.c +++ b/dlls/ole32/stubmanager.c @@ -440,7 +440,8 @@ ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tablewea IExternalConnection_ReleaseConnection(m->extern_conn, EXTCONN_STRONG, 0, last_unlock_releases);
if (rc == 0) - stub_manager_int_release(m); + if (!(m->extern_conn && last_unlock_releases && m->weakrefs)) + stub_manager_int_release(m);
return rc; } diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c index 105e644..680b831 100644 --- a/dlls/ole32/tests/marshal.c +++ b/dlls/ole32/tests/marshal.c @@ -1125,7 +1125,6 @@ static void test_tableweak_marshal_and_unmarshal_twice(void) * behaviour is altered; the remaining weak ref prevents stub shutdown. */ if (with_external_conn) { -todo_wine ok_more_than_one_lock(); IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); release_host_object(tid, 0); @@ -1347,7 +1346,6 @@ static void test_tableweak_and_normal_marshal_and_unmarshal(void) * behaviour is altered; the remaining weak ref prevents stub shutdown. */ if (with_external_conn) { -todo_wine ok_more_than_one_lock(); IStream_Seek(data.pStream1, ullZero, STREAM_SEEK_SET, NULL); release_host_object(tid, 1); @@ -1397,7 +1395,6 @@ static void test_tableweak_and_normal_marshal_and_releasedata(void)
if (with_external_conn) { -todo_wine ok_more_than_one_lock(); IStream_Seek(data.pStream1, ullZero, STREAM_SEEK_SET, NULL); release_host_object(tid, 1);