Move object-to-stub-manager mapping rule to register_ifstub.

This commit is contained in:
Robert Shearman 2005-02-08 14:26:19 +00:00 committed by Alexandre Julliard
parent ef1d367bcc
commit 514af6ce78
1 changed files with 4 additions and 20 deletions

View File

@ -85,10 +85,10 @@ get_facbuf_for_iid(REFIID riid,IPSFactoryBuffer **facbuf) {
return CoGetClassObject(&pxclsid,CLSCTX_INPROC_SERVER,NULL,&IID_IPSFactoryBuffer,(LPVOID*)facbuf); return CoGetClassObject(&pxclsid,CLSCTX_INPROC_SERVER,NULL,&IID_IPSFactoryBuffer,(LPVOID*)facbuf);
} }
/* creates a new stub manager and sets stdobjref->oid when stdobjref->oid == 0 */ /* creates a new stub manager */
HRESULT register_ifstub(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnknown *obj, MSHLFLAGS mshlflags) HRESULT register_ifstub(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnknown *obj, MSHLFLAGS mshlflags)
{ {
struct stub_manager *manager = NULL; struct stub_manager *manager;
struct ifstub *ifstub; struct ifstub *ifstub;
BOOL tablemarshal; BOOL tablemarshal;
IRpcStubBuffer *stub; IRpcStubBuffer *stub;
@ -117,12 +117,8 @@ HRESULT register_ifstub(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkn
stdobjref->oxid = apt->oxid; stdobjref->oxid = apt->oxid;
/* mid->oid of zero means create a new stub manager */ if ((manager = get_stub_manager_from_object(apt, obj)))
if (stdobjref->oid && (manager = get_stub_manager(apt, stdobjref->oid)))
{
TRACE("registering new ifstub on pre-existing manager\n"); TRACE("registering new ifstub on pre-existing manager\n");
}
else else
{ {
TRACE("constructing new stub manager\n"); TRACE("constructing new stub manager\n");
@ -130,9 +126,8 @@ HRESULT register_ifstub(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkn
manager = new_stub_manager(apt, obj); manager = new_stub_manager(apt, obj);
if (!manager) if (!manager)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
stdobjref->oid = manager->oid;
} }
stdobjref->oid = manager->oid;
tablemarshal = ((mshlflags & MSHLFLAGS_TABLESTRONG) || (mshlflags & MSHLFLAGS_TABLEWEAK)); tablemarshal = ((mshlflags & MSHLFLAGS_TABLESTRONG) || (mshlflags & MSHLFLAGS_TABLEWEAK));
@ -787,7 +782,6 @@ StdMarshalImpl_MarshalInterface(
IUnknown *pUnk; IUnknown *pUnk;
ULONG res; ULONG res;
HRESULT hres; HRESULT hres;
struct stub_manager *manager;
APARTMENT *apt = COM_CurrentApt(); APARTMENT *apt = COM_CurrentApt();
TRACE("(...,%s,...)\n",debugstr_guid(riid)); TRACE("(...,%s,...)\n",debugstr_guid(riid));
@ -809,16 +803,6 @@ StdMarshalImpl_MarshalInterface(
return E_NOINTERFACE; return E_NOINTERFACE;
} }
if ((manager = get_stub_manager_from_object(apt, pUnk)))
{
stdobjref.oid = manager->oid;
stub_manager_int_release(manager);
}
else
{
stdobjref.oid = 0; /* will be set by register_ifstub */
}
hres = register_ifstub(apt, &stdobjref, riid, pUnk, mshlflags); hres = register_ifstub(apt, &stdobjref, riid, pUnk, mshlflags);
IUnknown_Release(pUnk); IUnknown_Release(pUnk);