From: Dmitry Timoshkov dmitry@baikal.ru
This reverts commit 68a9046e30dd5ea8ab9fc753c728211751694b32.
This commit broke dlls/ole32/marshal.c tests.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/combase/rpc.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/dlls/combase/rpc.c b/dlls/combase/rpc.c index 160c5c579b2..c51b59de4bf 100644 --- a/dlls/combase/rpc.c +++ b/dlls/combase/rpc.c @@ -1344,6 +1344,15 @@ static DWORD WINAPI rpc_sendreceive_thread(LPVOID param) return 0; }
+static inline HRESULT ClientRpcChannelBuffer_IsCorrectApartment(ClientRpcChannelBuffer *This, const struct apartment *apt) +{ + if (!apt) + return S_FALSE; + if (This->oxid != apartment_getoxid(apt)) + return S_FALSE; + return S_OK; +} + static HRESULT WINAPI ClientRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus) { ClientRpcChannelBuffer *This = (ClientRpcChannelBuffer *)iface; @@ -1356,15 +1365,17 @@ static HRESULT WINAPI ClientRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER ifac ORPC_EXTENT_ARRAY orpc_ext_array; WIRE_ORPC_EXTENT *first_wire_orpc_extent = NULL; HRESULT hrFault = S_OK; - struct apartment *apt = apartment_findfromoxid(This->oxid); + struct apartment *apt = apartment_get_current_or_mta(); struct tlsdata *tlsdata;
TRACE("%p, iMethod %ld\n", olemsg, olemsg->iMethod);
- if (!apt) + hr = ClientRpcChannelBuffer_IsCorrectApartment(This, apt); + if (hr != S_OK) { ERR("called from wrong apartment, should have been 0x%s\n", wine_dbgstr_longlong(This->oxid)); + if (apt) apartment_release(apt); return RPC_E_WRONG_THREAD; }