Disconnect proxies at COM shutdown to release the corresponding

stubs.
This commit is contained in:
Mike Hearn 2004-08-02 18:28:29 +00:00 committed by Alexandre Julliard
parent 5e6487fe78
commit 819942339f
3 changed files with 21 additions and 0 deletions

View File

@ -512,6 +512,11 @@ void WINAPI CoUninitialize(void)
RunningObjectTableImpl_UnInitialize();
/* disconnect proxies to release the corresponding stubs.
* FIXME: native version might not do this and we might just be working
* around bugs elsewhere. */
MARSHAL_Disconnect_Proxies();
/* Release the references to the registered class objects */
COM_RevokeAllClasses();

View File

@ -148,6 +148,7 @@ MARSHAL_Compare_Mids_NoInterface(wine_marshal_id *mid1, wine_marshal_id *mid2) {
HRESULT MARSHAL_Find_Stub_Buffer(wine_marshal_id *mid,IRpcStubBuffer **stub);
void MARSHAL_Invalidate_Stub_From_MID(wine_marshal_id *mid);
HRESULT MARSHAL_Disconnect_Proxies();
HRESULT MARSHAL_GetStandardMarshalCF(LPVOID *ppv);

View File

@ -187,6 +187,18 @@ MARSHAL_Find_Proxy(wine_marshal_id *mid,LPUNKNOWN *punk) {
return E_FAIL;
}
HRESULT
MARSHAL_Disconnect_Proxies() {
int i;
TRACE("Disconnecting %d proxies\n", nrofproxies);
for (i = 0; i < nrofproxies; i++)
IRpcProxyBuffer_Disconnect((IRpcProxyBuffer*)proxies[i].pUnk);
return S_OK;
}
HRESULT
MARSHAL_Find_Proxy_Object(wine_marshal_id *mid,LPUNKNOWN *punk) {
int i;
@ -359,6 +371,9 @@ StdMarshalImpl_UnmarshalInterface(
FIXME("Failed to create a proxy for %s\n",debugstr_guid(riid));
return hres;
}
MARSHAL_Register_Proxy(&mid, (LPUNKNOWN) rpcproxy);
hres = PIPE_GetNewPipeBuf(&mid,&chanbuf);
IPSFactoryBuffer_Release(psfacbuf);
if (hres) {