From 7b6b24d868698a45ede3aa5aec0eadb69dc53657 Mon Sep 17 00:00:00 2001 From: Paul Vriens Date: Fri, 21 Jan 2005 10:18:16 +0000 Subject: [PATCH] - Use Interlocked* functions in AddRef and Release. - Store the result of the Interlocked functions and use only this. --- dlls/d3dx8/d3dxbuffer.c | 13 +++++++++---- dlls/dmband/band.c | 13 +++++++++---- dlls/dmband/bandtrack.c | 13 +++++++++---- dlls/dmband/dmband_main.c | 8 ++++---- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/dlls/d3dx8/d3dxbuffer.c b/dlls/d3dx8/d3dxbuffer.c index c84fcbdd3a4..e73d9c8234b 100644 --- a/dlls/d3dx8/d3dxbuffer.c +++ b/dlls/d3dx8/d3dxbuffer.c @@ -51,14 +51,19 @@ HRESULT WINAPI ID3DXBufferImpl_QueryInterface(LPD3DXBUFFER iface, REFIID riid, L ULONG WINAPI ID3DXBufferImpl_AddRef(LPD3DXBUFFER iface) { ID3DXBufferImpl *This = (ID3DXBufferImpl *)iface; - TRACE("(%p) : AddRef from %ld\n", This, This->ref); - return ++(This->ref); + ULONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) : AddRef from %ld\n", This, ref - 1); + + return ref; } ULONG WINAPI ID3DXBufferImpl_Release(LPD3DXBUFFER iface) { ID3DXBufferImpl *This = (ID3DXBufferImpl *)iface; - ULONG ref = --This->ref; - TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) : ReleaseRef to %ld\n", This, ref); + if (ref == 0) { HeapFree(GetProcessHeap(), 0, This->buffer); HeapFree(GetProcessHeap(), 0, This); diff --git a/dlls/dmband/band.c b/dlls/dmband/band.c index 6613eeb6f0a..2e33ec2ddf5 100644 --- a/dlls/dmband/band.c +++ b/dlls/dmband/band.c @@ -56,14 +56,19 @@ HRESULT WINAPI IDirectMusicBandImpl_IUnknown_QueryInterface (LPUNKNOWN iface, RE ULONG WINAPI IDirectMusicBandImpl_IUnknown_AddRef (LPUNKNOWN iface) { ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface); - TRACE("(%p) : AddRef from %ld\n", This, This->ref); - return ++(This->ref); + ULONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) : AddRef from %ld\n", This, ref - 1); + + return ref; } ULONG WINAPI IDirectMusicBandImpl_IUnknown_Release (LPUNKNOWN iface) { ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface); - ULONG ref = --This->ref; - TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) : ReleaseRef to %ld\n", This, ref); + if (ref == 0) { HeapFree(GetProcessHeap(), 0, This); } diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index 1dc117a1ebc..27c71c21791 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -51,14 +51,19 @@ HRESULT WINAPI IDirectMusicBandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, R ULONG WINAPI IDirectMusicBandTrack_IUnknown_AddRef (LPUNKNOWN iface) { ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface); - TRACE("(%p) : AddRef from %ld\n", This, This->ref); - return ++(This->ref); + ULONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) : AddRef from %ld\n", This, ref - 1); + + return ref; } ULONG WINAPI IDirectMusicBandTrack_IUnknown_Release (LPUNKNOWN iface) { ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface); - ULONG ref = --This->ref; - TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) : ReleaseRef to %ld\n", This, ref); + if (ref == 0) { HeapFree(GetProcessHeap(), 0, This); } diff --git a/dlls/dmband/dmband_main.c b/dlls/dmband/dmband_main.c index 2980a583fe6..7ccfaa5b8d4 100644 --- a/dlls/dmband/dmband_main.c +++ b/dlls/dmband/dmband_main.c @@ -39,13 +39,13 @@ static HRESULT WINAPI BandCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPV static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface) { IClassFactoryImpl *This = (IClassFactoryImpl *)iface; - return ++(This->ref); + return InterlockedIncrement(&This->ref); } static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface) { IClassFactoryImpl *This = (IClassFactoryImpl *)iface; /* static class, won't be freed */ - return --(This->ref); + return InterlockedDecrement(&This->ref); } static HRESULT WINAPI BandCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { @@ -84,13 +84,13 @@ static HRESULT WINAPI BandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID rii static ULONG WINAPI BandTrackCF_AddRef(LPCLASSFACTORY iface) { IClassFactoryImpl *This = (IClassFactoryImpl *)iface; - return ++(This->ref); + return InterlockedIncrement(&This->ref); } static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface) { IClassFactoryImpl *This = (IClassFactoryImpl *)iface; /* static class, won't be freed */ - return --(This->ref); + return InterlockedDecrement(&This->ref); } static HRESULT WINAPI BandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { -- 2.11.4.GIT