Module: wine Branch: master Commit: 1360357f92ac6bda3c1802870fbe9a45de2fe146 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1360357f92ac6bda3c1802870f...
Author: Rob Shearman rob@codeweavers.com Date: Thu Apr 5 17:33:36 2007 +0100
ole32: Fix a hack which depended on the IID of the interface being marshaled
to determine whether we were marshaling the remote unknown for the apartment or not.
---
dlls/ole32/compobj_private.h | 3 +++ dlls/ole32/stubmanager.c | 4 ++-- dlls/ole32/tests/marshal.c | 5 ----- 3 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h index 401224a..e877cce 100644 --- a/dlls/ole32/compobj_private.h +++ b/dlls/ole32/compobj_private.h @@ -45,6 +45,9 @@ DEFINE_OLEGUID( CLSID_DfMarshal, 0x0000030b, 0, 0 ); DEFINE_OLEGUID( CLSID_PSFactoryBuffer, 0x00000320, 0, 0 ); DEFINE_OLEGUID( CLSID_InProcFreeMarshaler, 0x0000033a, 0, 0 );
+/* signal to stub manager that this is a rem unknown object */ +#define MSHLFLAGSP_REMUNKNOWN 0x80000000 + /* Thread-safety Annotation Legend: * * RO - The value is read only. It never changes after creation, so no diff --git a/dlls/ole32/stubmanager.c b/dlls/ole32/stubmanager.c index b7d6ba7..76e07a2 100644 --- a/dlls/ole32/stubmanager.c +++ b/dlls/ole32/stubmanager.c @@ -471,7 +471,7 @@ struct ifstub *stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *s
/* FIXME: find a cleaner way of identifying that we are creating an ifstub * for the remunknown interface */ - if (IsEqualIID(iid, &IID_IRemUnknown)) + if (flags & MSHLFLAGSP_REMUNKNOWN) stub->ipid = m->oxid_info.ipidRemUnknown; else generate_ipid(m, &stub->ipid); @@ -763,7 +763,7 @@ HRESULT start_apartment_remote_unknown(void) { STDOBJREF stdobjref; /* dummy - not used */ /* register it with the stub manager */ - hr = marshal_object(apt, &stdobjref, &IID_IRemUnknown, (IUnknown *)pRemUnknown, MSHLFLAGS_NORMAL); + hr = marshal_object(apt, &stdobjref, &IID_IRemUnknown, (IUnknown *)pRemUnknown, MSHLFLAGS_NORMAL|MSHLFLAGSP_REMUNKNOWN); /* release our reference to the object as the stub manager will manage the life cycle for us */ IRemUnknown_Release(pRemUnknown); if (hr == S_OK) diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c index 41a2aec..7e3e82e 100644 --- a/dlls/ole32/tests/marshal.c +++ b/dlls/ole32/tests/marshal.c @@ -2199,12 +2199,7 @@ static void test_client_security(void) CoTaskMemFree(pServerPrincName);
IClassFactory_Release(pProxy); -#if 0 - /* FIXME: fix stub manager to not depend on the IID of the interface to - * determine whether it is really the rem unknown for the object before - * re-enabling this line */ IUnknown_Release(pProxy2); -#endif IUnknown_Release(pUnknown1); IUnknown_Release(pUnknown2); IMarshal_Release(pMarshal);