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)