Alexandre Julliard : rpcrt4: Use interlocked functions to increment/ decrement ref counts.
Alexandre Julliard
julliard at winehq.org
Mon Jul 7 09:19:12 CDT 2008
Module: wine
Branch: master
Commit: 6f8749b7bcf60cf72d43742367d930229dd54890
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f8749b7bcf60cf72d43742367d930229dd54890
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jul 7 12:09:45 2008 +0200
rpcrt4: Use interlocked functions to increment/decrement ref counts.
---
dlls/rpcrt4/cpsf.c | 6 +++---
dlls/rpcrt4/ndr_ole.c | 11 ++++++-----
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/dlls/rpcrt4/cpsf.c b/dlls/rpcrt4/cpsf.c
index 23c4aeb..373c97a 100644
--- a/dlls/rpcrt4/cpsf.c
+++ b/dlls/rpcrt4/cpsf.c
@@ -65,7 +65,7 @@ static HRESULT WINAPI CStdPSFactory_QueryInterface(LPPSFACTORYBUFFER iface,
if (IsEqualGUID(&IID_IUnknown,riid) ||
IsEqualGUID(&IID_IPSFactoryBuffer,riid)) {
*obj = This;
- This->RefCount++;
+ InterlockedIncrement( &This->RefCount );
return S_OK;
}
return E_NOINTERFACE;
@@ -75,14 +75,14 @@ static ULONG WINAPI CStdPSFactory_AddRef(LPPSFACTORYBUFFER iface)
{
CStdPSFactoryBuffer *This = (CStdPSFactoryBuffer *)iface;
TRACE("(%p)->AddRef()\n",iface);
- return ++(This->RefCount);
+ return InterlockedIncrement( &This->RefCount );
}
static ULONG WINAPI CStdPSFactory_Release(LPPSFACTORYBUFFER iface)
{
CStdPSFactoryBuffer *This = (CStdPSFactoryBuffer *)iface;
TRACE("(%p)->Release()\n",iface);
- return --(This->RefCount);
+ return InterlockedDecrement( &This->RefCount );
}
static HRESULT WINAPI CStdPSFactory_CreateProxy(LPPSFACTORYBUFFER iface,
diff --git a/dlls/rpcrt4/ndr_ole.c b/dlls/rpcrt4/ndr_ole.c
index edfc78c..9bfab95 100644
--- a/dlls/rpcrt4/ndr_ole.c
+++ b/dlls/rpcrt4/ndr_ole.c
@@ -79,7 +79,7 @@ static HMODULE LoadCOM(void)
typedef struct RpcStreamImpl
{
const IStreamVtbl *lpVtbl;
- DWORD RefCount;
+ LONG RefCount;
PMIDL_STUB_MESSAGE pMsg;
LPDWORD size;
unsigned char *data;
@@ -95,7 +95,7 @@ static HRESULT WINAPI RpcStream_QueryInterface(LPSTREAM iface,
IsEqualGUID(&IID_ISequentialStream, riid) ||
IsEqualGUID(&IID_IStream, riid)) {
*obj = This;
- This->RefCount++;
+ InterlockedIncrement( &This->RefCount );
return S_OK;
}
return E_NOINTERFACE;
@@ -104,19 +104,20 @@ static HRESULT WINAPI RpcStream_QueryInterface(LPSTREAM iface,
static ULONG WINAPI RpcStream_AddRef(LPSTREAM iface)
{
RpcStreamImpl *This = (RpcStreamImpl *)iface;
- return ++(This->RefCount);
+ return InterlockedIncrement( &This->RefCount );
}
static ULONG WINAPI RpcStream_Release(LPSTREAM iface)
{
RpcStreamImpl *This = (RpcStreamImpl *)iface;
- if (!--(This->RefCount)) {
+ ULONG ref = InterlockedDecrement( &This->RefCount );
+ if (!ref) {
TRACE("size=%d\n", *This->size);
This->pMsg->Buffer = This->data + *This->size;
HeapFree(GetProcessHeap(),0,This);
return 0;
}
- return This->RefCount;
+ return ref;
}
static HRESULT WINAPI RpcStream_Read(LPSTREAM iface,
More information about the wine-cvs
mailing list