Huw Davies : 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 .

Alexandre Julliard julliard at winehq.org
Thu Oct 24 13:18:56 CDT 2013


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

Author: Huw Davies <huw at 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);




More information about the wine-cvs mailing list