Robert Shearman : rpcrt4:
Make the reference counting in the standard proxy thread-safe.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Sep 7 03:45:44 CDT 2006
Module: wine
Branch: master
Commit: ada61620de93a6e75ac499224ddbb23e20c88333
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ada61620de93a6e75ac499224ddbb23e20c88333
Author: Robert Shearman <rob at codeweavers.com>
Date: Tue Aug 29 21:16:44 2006 +0100
rpcrt4: Make the reference counting in the standard proxy thread-safe.
---
dlls/rpcrt4/cproxy.c | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/dlls/rpcrt4/cproxy.c b/dlls/rpcrt4/cproxy.c
index 70f0556..280dbe1 100644
--- a/dlls/rpcrt4/cproxy.c
+++ b/dlls/rpcrt4/cproxy.c
@@ -44,7 +44,7 @@ struct StublessThunk;
typedef struct {
const IRpcProxyBufferVtbl *lpVtbl;
LPVOID *PVtbl;
- DWORD RefCount;
+ LONG RefCount;
const MIDL_STUBLESS_PROXY_INFO *stubless;
const IID* piid;
LPUNKNOWN pUnkOuter;
@@ -222,13 +222,13 @@ static HRESULT WINAPI StdProxy_QueryInte
if (IsEqualGUID(&IID_IUnknown,riid) ||
IsEqualGUID(This->piid,riid)) {
*obj = &This->PVtbl;
- This->RefCount++;
+ InterlockedIncrement(&This->RefCount);
return S_OK;
}
if (IsEqualGUID(&IID_IRpcProxyBuffer,riid)) {
*obj = &This->lpVtbl;
- This->RefCount++;
+ InterlockedIncrement(&This->RefCount);
return S_OK;
}
@@ -240,19 +240,19 @@ static ULONG WINAPI StdProxy_AddRef(LPRP
ICOM_THIS_MULTI(StdProxyImpl,lpVtbl,iface);
TRACE("(%p)->AddRef()\n",This);
- return ++(This->RefCount);
+ return InterlockedIncrement(&This->RefCount);
}
static ULONG WINAPI StdProxy_Release(LPRPCPROXYBUFFER iface)
{
+ ULONG refs;
ICOM_THIS_MULTI(StdProxyImpl,lpVtbl,iface);
TRACE("(%p)->Release()\n",This);
- if (!--(This->RefCount)) {
+ refs = InterlockedDecrement(&This->RefCount);
+ if (!refs)
StdProxy_Destruct((LPRPCPROXYBUFFER)&This->lpVtbl);
- return 0;
- }
- return This->RefCount;
+ return refs;
}
static HRESULT WINAPI StdProxy_Connect(LPRPCPROXYBUFFER iface,
More information about the wine-cvs
mailing list