- Use Interlocked* functions in AddRef and Release.

- Store the result of the Interlocked functions and use only this.
This commit is contained in:
Paul Vriens 2005-01-21 10:18:16 +00:00 committed by Alexandre Julliard
parent eb23257b7d
commit 7b6b24d868
4 changed files with 31 additions and 16 deletions

View File

@ -51,14 +51,19 @@ HRESULT WINAPI ID3DXBufferImpl_QueryInterface(LPD3DXBUFFER iface, REFIID riid, L
ULONG WINAPI ID3DXBufferImpl_AddRef(LPD3DXBUFFER iface) { ULONG WINAPI ID3DXBufferImpl_AddRef(LPD3DXBUFFER iface) {
ID3DXBufferImpl *This = (ID3DXBufferImpl *)iface; ID3DXBufferImpl *This = (ID3DXBufferImpl *)iface;
TRACE("(%p) : AddRef from %ld\n", This, This->ref); ULONG ref = InterlockedIncrement(&This->ref);
return ++(This->ref);
TRACE("(%p) : AddRef from %ld\n", This, ref - 1);
return ref;
} }
ULONG WINAPI ID3DXBufferImpl_Release(LPD3DXBUFFER iface) { ULONG WINAPI ID3DXBufferImpl_Release(LPD3DXBUFFER iface) {
ID3DXBufferImpl *This = (ID3DXBufferImpl *)iface; ID3DXBufferImpl *This = (ID3DXBufferImpl *)iface;
ULONG ref = --This->ref; ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
TRACE("(%p) : ReleaseRef to %ld\n", This, ref);
if (ref == 0) { if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This->buffer); HeapFree(GetProcessHeap(), 0, This->buffer);
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);

View File

@ -56,14 +56,19 @@ HRESULT WINAPI IDirectMusicBandImpl_IUnknown_QueryInterface (LPUNKNOWN iface, RE
ULONG WINAPI IDirectMusicBandImpl_IUnknown_AddRef (LPUNKNOWN iface) { ULONG WINAPI IDirectMusicBandImpl_IUnknown_AddRef (LPUNKNOWN iface) {
ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface); ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref); ULONG ref = InterlockedIncrement(&This->ref);
return ++(This->ref);
TRACE("(%p) : AddRef from %ld\n", This, ref - 1);
return ref;
} }
ULONG WINAPI IDirectMusicBandImpl_IUnknown_Release (LPUNKNOWN iface) { ULONG WINAPI IDirectMusicBandImpl_IUnknown_Release (LPUNKNOWN iface) {
ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface); ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface);
ULONG ref = --This->ref; ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
TRACE("(%p) : ReleaseRef to %ld\n", This, ref);
if (ref == 0) { if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
} }

View File

@ -51,14 +51,19 @@ HRESULT WINAPI IDirectMusicBandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, R
ULONG WINAPI IDirectMusicBandTrack_IUnknown_AddRef (LPUNKNOWN iface) { ULONG WINAPI IDirectMusicBandTrack_IUnknown_AddRef (LPUNKNOWN iface) {
ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface); ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref); ULONG ref = InterlockedIncrement(&This->ref);
return ++(This->ref);
TRACE("(%p) : AddRef from %ld\n", This, ref - 1);
return ref;
} }
ULONG WINAPI IDirectMusicBandTrack_IUnknown_Release (LPUNKNOWN iface) { ULONG WINAPI IDirectMusicBandTrack_IUnknown_Release (LPUNKNOWN iface) {
ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface); ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface);
ULONG ref = --This->ref; ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
TRACE("(%p) : ReleaseRef to %ld\n", This, ref);
if (ref == 0) { if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
} }

View File

@ -39,13 +39,13 @@ static HRESULT WINAPI BandCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPV
static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface) { static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface) {
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
return ++(This->ref); return InterlockedIncrement(&This->ref);
} }
static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface) { static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface) {
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
/* static class, won't be freed */ /* 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) { 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) { static ULONG WINAPI BandTrackCF_AddRef(LPCLASSFACTORY iface) {
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
return ++(This->ref); return InterlockedIncrement(&This->ref);
} }
static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface) { static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface) {
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
/* static class, won't be freed */ /* 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) { static HRESULT WINAPI BandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {