Disconnect proxies at COM shutdown to release the corresponding
stubs.
This commit is contained in:
parent
5e6487fe78
commit
819942339f
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue