Mike Hearn wrote:

Oops, I forgot to unapply various patches that aren't ready yet or will
be submitted separately. Here it is on its own.

This fixes the FunFlash Polaroid installer.

ChangeLog:
Disconnect IRemUnknown proxy after the others. Add some tracing.

The IRemUnknown proxy shouldn't be disconnected at all. Can you try this patch for me?

Changelog:
Don't disconnect proxies flagged with SORFP_NOLIFETIMEMGMT. It makes no sense and only causes trouble for proxies that depend on these proxies being available.


--
Rob Shearman

Index: dlls/ole32/marshal.c
===================================================================
RCS file: /home/wine/wine/dlls/ole32/marshal.c,v
retrieving revision 1.75
diff -u -p -r1.75 marshal.c
--- dlls/ole32/marshal.c	23 May 2005 10:27:23 -0000	1.75
+++ dlls/ole32/marshal.c	5 Jun 2005 16:27:01 -0000
@@ -601,18 +601,24 @@ static void proxy_manager_disconnect(str
     TRACE("oxid = %s, oid = %s\n", wine_dbgstr_longlong(This->oxid),
         wine_dbgstr_longlong(This->oid));
 
-    EnterCriticalSection(&This->cs);
-
-    LIST_FOR_EACH(cursor, &This->interfaces)
+    /* SORFP_NOLIFTIMEMGMT proxies shouldn't be disconnected - it won't do
+     * anything anyway, except cause problems for other objects that depend
+     * on this proxy always working */
+    if (!(This->sorflags & SORFP_NOLIFETIMEMGMT))
     {
-        struct ifproxy * ifproxy = LIST_ENTRY(cursor, struct ifproxy, entry);
-        ifproxy_disconnect(ifproxy);
+        EnterCriticalSection(&This->cs);
+        
+        LIST_FOR_EACH(cursor, &This->interfaces)
+        {
+            struct ifproxy * ifproxy = LIST_ENTRY(cursor, struct ifproxy, entry);
+            ifproxy_disconnect(ifproxy);
+        }
+        
+        /* apartment is being destroyed so don't keep a pointer around to it */
+        This->parent = NULL;
+        
+        LeaveCriticalSection(&This->cs);
     }
-
-    /* apartment is being destroyed so don't keep a pointer around to it */
-    This->parent = NULL;
-
-    LeaveCriticalSection(&This->cs);
 }
 
 static HRESULT proxy_manager_get_remunknown(struct proxy_manager * This, IRemUnknown **remunk)

Reply via email to