Hello,
Just to get started, I thought I could do some work of the Interlocking cleanup; The first patch wasn't applied yet so it's included in this patch as well
I tried to do as suggested in the patch on the site and came up with this; I hope it's usefull...
regards,
Joris
Index: dlls/ole32/antimoniker.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/antimoniker.c,v retrieving revision 1.21 diff -u -r1.21 antimoniker.c --- dlls/ole32/antimoniker.c 9 Sep 2004 21:03:58 -0000 1.21 +++ dlls/ole32/antimoniker.c 23 Sep 2004 20:35:17 -0000 @@ -186,7 +186,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -195,19 +195,21 @@ ULONG WINAPI AntiMonikerImpl_Release(IMoniker* iface) { AntiMonikerImpl *This = (AntiMonikerImpl *)iface; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref); +
/* destroy the object if there's no more reference on it */ - if (This->ref==0){ + if (ref == 0){
AntiMonikerImpl_Destroy(This);
return 0; } - return This->ref; + return ref; }
/****************************************************************************** Index: dlls/ole32/bindctx.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/bindctx.c,v retrieving revision 1.28 diff -u -r1.28 bindctx.c --- dlls/ole32/bindctx.c 9 Sep 2004 21:03:58 -0000 1.28 +++ dlls/ole32/bindctx.c 23 Sep 2004 20:35:17 -0000 @@ -142,7 +142,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -151,12 +151,13 @@ ULONG WINAPI BindCtxImpl_Release(IBindCtx* iface) { BindCtxImpl *This = (BindCtxImpl *)iface; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
- if (This->ref==0){ + if (ref == 0){
/* release all registered objects */ BindCtxImpl_ReleaseBoundObjects((IBindCtx*)This); @@ -165,7 +166,7 @@
return 0; } - return This->ref; + return ref; }
Index: dlls/ole32/clipboard.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/clipboard.c,v retrieving revision 1.34 diff -u -r1.34 clipboard.c --- dlls/ole32/clipboard.c 9 Sep 2004 21:03:58 -0000 1.34 +++ dlls/ole32/clipboard.c 23 Sep 2004 20:35:19 -0000 @@ -1162,9 +1162,8 @@
TRACE("(%p)->(count=%lu)\n",This, This->ref);
- This->ref++; + return InterlockedIncrement(&This->ref);
- return This->ref; }
/************************************************************************ @@ -1179,23 +1178,24 @@ * Declare "This" pointer */ OLEClipbrd *This = (OLEClipbrd *)iface; + ULONG ref;
TRACE("(%p)->(count=%lu)\n",This, This->ref);
/* * Decrease the reference count on this object. */ - This->ref--; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (This->ref==0) + if (ref == 0) { OLEClipbrd_Destroy(This); }
- return This->ref; + return ref; }
@@ -1651,7 +1651,7 @@ if (This->pUnkDataObj) IUnknown_AddRef(This->pUnkDataObj);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/************************************************************************ @@ -1663,13 +1663,15 @@ { IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface; LPMALLOC pIMalloc; + ULONG ref;
TRACE("(%p)->(count=%lu)\n",This, This->ref);
if (This->pUnkDataObj) IUnknown_Release(This->pUnkDataObj); /* Release parent data object */
- if (!--(This->ref)) + ref = InterlockedDecrement(&This->ref); + if (!ref) { TRACE("() - destroying IEnumFORMATETC(%p)\n",This); if (SUCCEEDED(CoGetMalloc(MEMCTX_TASK, &pIMalloc))) @@ -1682,7 +1684,7 @@ return 0; }
- return This->ref; + return ref; }
/************************************************************************ Index: dlls/ole32/compositemoniker.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/compositemoniker.c,v retrieving revision 1.31 diff -u -r1.31 compositemoniker.c --- dlls/ole32/compositemoniker.c 9 Sep 2004 21:03:58 -0000 1.31 +++ dlls/ole32/compositemoniker.c 23 Sep 2004 20:35:20 -0000 @@ -243,7 +243,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -253,13 +253,14 @@ { CompositeMonikerImpl *This = (CompositeMonikerImpl *)iface; ULONG i; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
/* destroy the object if there's no more reference on it */ - if (This->ref==0){ + if (ref == 0){
/* release all the components before destroying this object */ for (i=0;i<This->tabLastIndex;i++) @@ -269,7 +270,7 @@
return 0; } - return This->ref; + return ref; }
/****************************************************************************** @@ -1527,7 +1528,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref);
}
@@ -1537,14 +1538,14 @@ ULONG WINAPI EnumMonikerImpl_Release(IEnumMoniker* iface) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - ULONG i - ; + ULONG i; + ULONG ref; TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
/* destroy the object if there's no more reference on it */ - if (This->ref==0){ + if (ref == 0) {
for(i=0;i<This->tabSize;i++) IMoniker_Release(This->tabMoniker[i]); @@ -1554,7 +1555,7 @@
return 0; } - return This->ref; + return ref; }
/****************************************************************************** Index: dlls/ole32/datacache.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/datacache.c,v retrieving revision 1.26 diff -u -r1.26 datacache.c --- dlls/ole32/datacache.c 23 Aug 2004 19:39:50 -0000 1.26 +++ dlls/ole32/datacache.c 23 Sep 2004 20:35:21 -0000 @@ -968,10 +968,11 @@ IUnknown* iface) { _ICOM_THIS_From_NDIUnknown(DataCache, iface); + ULONG ref;
- this->ref++; + ref = InterlockedIncrement(&this->ref);
- return this->ref; + return ref; }
/************************************************************************ @@ -986,23 +987,24 @@ IUnknown* iface) { _ICOM_THIS_From_NDIUnknown(DataCache, iface); + ULONG ref;
/* * Decrease the reference count on this object. */ - this->ref--; + ref = InterlockedDecrement(&this->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (this->ref==0) + if (ref == 0) { DataCache_Destroy(this);
return 0; }
- return this->ref; + return ref; }
/********************************************************* Index: dlls/ole32/defaulthandler.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/defaulthandler.c,v retrieving revision 1.19 diff -u -r1.19 defaulthandler.c --- dlls/ole32/defaulthandler.c 23 Aug 2004 19:39:50 -0000 1.19 +++ dlls/ole32/defaulthandler.c 23 Sep 2004 20:35:22 -0000 @@ -656,10 +656,11 @@ IUnknown* iface) { _ICOM_THIS_From_NDIUnknown(DefaultHandler, iface); + ULONG ref;
- this->ref++; + ref = InterlockedIncrement(&this->ref);
- return this->ref; + return ref; }
/************************************************************************ @@ -674,23 +675,24 @@ IUnknown* iface) { _ICOM_THIS_From_NDIUnknown(DefaultHandler, iface); + ULONG ref;
/* * Decrease the reference count on this object. */ - this->ref--; + ref = InterlockedDecrement(&this->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (this->ref==0) + if (ref == 0) { DefaultHandler_Destroy(this);
return 0; }
- return this->ref; + return ref; }
/********************************************************* Index: dlls/ole32/filemoniker.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/filemoniker.c,v retrieving revision 1.38 diff -u -r1.38 filemoniker.c --- dlls/ole32/filemoniker.c 9 Sep 2004 21:03:58 -0000 1.38 +++ dlls/ole32/filemoniker.c 23 Sep 2004 20:35:23 -0000 @@ -194,7 +194,7 @@
TRACE("(%p)\n",iface);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -203,19 +203,20 @@ ULONG WINAPI FileMonikerImpl_Release(IMoniker* iface) { FileMonikerImpl *This = (FileMonikerImpl *)iface; + ULONG ref;
TRACE("(%p)\n",iface);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
/* destroy the object if there's no more reference on it */ - if (This->ref==0){ + if (ref == 0) {
FileMonikerImpl_Destroy(This);
return 0; } - return This->ref; + return ref; }
/****************************************************************************** Index: dlls/ole32/hglobalstream.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/hglobalstream.c,v retrieving revision 1.25 diff -u -r1.25 hglobalstream.c --- dlls/ole32/hglobalstream.c 23 Aug 2004 19:39:50 -0000 1.25 +++ dlls/ole32/hglobalstream.c 23 Sep 2004 20:35:24 -0000 @@ -378,10 +378,11 @@ IStream* iface) { HGLOBALStreamImpl* const This=(HGLOBALStreamImpl*)iface; + ULONG ref;
- This->ref++; + ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/*** @@ -392,12 +393,9 @@ IStream* iface) { HGLOBALStreamImpl* const This=(HGLOBALStreamImpl*)iface; - ULONG newRef;
- This->ref--; - - newRef = This->ref; + newRef = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. Index: dlls/ole32/itemmoniker.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/itemmoniker.c,v retrieving revision 1.28 diff -u -r1.28 itemmoniker.c --- dlls/ole32/itemmoniker.c 9 Sep 2004 21:03:58 -0000 1.28 +++ dlls/ole32/itemmoniker.c 23 Sep 2004 20:35:25 -0000 @@ -193,7 +193,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -202,19 +202,20 @@ ULONG WINAPI ItemMonikerImpl_Release(IMoniker* iface) { ItemMonikerImpl *This = (ItemMonikerImpl *)iface; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
/* destroy the object if there's no more reference on it */ - if (This->ref==0){ + if (ref == 0){
ItemMonikerImpl_Destroy(This);
return 0; } - return This->ref; + return ref; }
/****************************************************************************** Index: dlls/ole32/marshal.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/marshal.c,v retrieving revision 1.31 diff -u -r1.31 marshal.c --- dlls/ole32/marshal.c 9 Sep 2004 21:03:58 -0000 1.31 +++ dlls/ole32/marshal.c 23 Sep 2004 20:35:25 -0000 @@ -217,17 +217,20 @@ static ULONG WINAPI StdMarshalImpl_AddRef(LPMARSHAL iface) { StdMarshalImpl *This = (StdMarshalImpl *)iface; - This->ref++; - return This->ref; + ULONG ref; + ref = InterlockedIncrement(&This->ref); + return ref; }
static ULONG WINAPI StdMarshalImpl_Release(LPMARSHAL iface) { StdMarshalImpl *This = (StdMarshalImpl *)iface; - This->ref--; + ULONG ref; + ref = InterlockedDecrement(&This->ref);
- if (This->ref) - return This->ref; + /* why is this syntax so different ?? */ + if (ref) + return ref; HeapFree(GetProcessHeap(),0,This); return 0; } Index: dlls/ole32/memlockbytes.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/memlockbytes.c,v retrieving revision 1.20 diff -u -r1.20 memlockbytes.c --- dlls/ole32/memlockbytes.c 23 Aug 2004 19:39:50 -0000 1.20 +++ dlls/ole32/memlockbytes.c 23 Sep 2004 20:35:25 -0000 @@ -351,10 +351,11 @@ ULONG WINAPI HGLOBALLockBytesImpl_AddRef(ILockBytes* iface) { HGLOBALLockBytesImpl* const This=(HGLOBALLockBytesImpl*)iface; + ULONG ref;
- This->ref++; + ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/****************************************************************************** @@ -365,21 +366,19 @@ { HGLOBALLockBytesImpl* const This=(HGLOBALLockBytesImpl*)iface;
- ULONG newRef; + ULONG ref;
- This->ref--; - - newRef = This->ref; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (newRef==0) + if (ref==0) { HGLOBALLockBytesImpl_Destroy(This); }
- return newRef; + return ref; }
/****************************************************************************** Index: dlls/ole32/memlockbytes16.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/memlockbytes16.c,v retrieving revision 1.8 diff -u -r1.8 memlockbytes16.c --- dlls/ole32/memlockbytes16.c 12 Aug 2004 23:00:55 -0000 1.8 +++ dlls/ole32/memlockbytes16.c 23 Sep 2004 20:35:26 -0000 @@ -277,12 +277,13 @@ ULONG WINAPI HGLOBALLockBytesImpl16_AddRef(ILockBytes16* iface) { HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref++; + ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/****************************************************************************** @@ -293,19 +294,17 @@ { HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface;
- ULONG newRef; + ULONG ref; TRACE("(%p)\n",This);
- This->ref--; - - newRef = This->ref; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (newRef==0) + if (ref==0) HGLOBALLockBytesImpl16_Destroy(This); - return newRef; + return ref; }
/****************************************************************************** Index: dlls/ole32/moniker.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/moniker.c,v retrieving revision 1.35 diff -u -r1.35 moniker.c --- dlls/ole32/moniker.c 9 Sep 2004 21:03:58 -0000 1.35 +++ dlls/ole32/moniker.c 23 Sep 2004 20:35:26 -0000 @@ -145,7 +145,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/*********************************************************************** @@ -174,13 +174,14 @@ { DWORD i; RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
/* unitialize ROT structure if there's no more reference to it*/ - if (This->ref==0){ + if (ref == 0) {
/* release all registered objects */ for(i=0;i<This->runObjTabLastIndx;i++) @@ -201,7 +202,7 @@ return 0; }
- return This->ref; + return ref; }
/*********************************************************************** Index: dlls/ole32/oleobj.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/oleobj.c,v retrieving revision 1.18 diff -u -r1.18 oleobj.c --- dlls/ole32/oleobj.c 9 Sep 2004 21:03:58 -0000 1.18 +++ dlls/ole32/oleobj.c 23 Sep 2004 20:35:27 -0000 @@ -189,17 +189,18 @@ LPOLEADVISEHOLDER iface) { OleAdviseHolderImpl *This = (OleAdviseHolderImpl *)iface; + ULONG ref; TRACE("(%p)->(ref=%ld)\n", This, This->ref); - This->ref--; + ref = InterlockedDecrement(&This->ref);
- if (This->ref == 0) + if (ref == 0) { OleAdviseHolderImpl_Destructor(This);
return 0; }
- return This->ref; + return ref; }
/****************************************************************************** @@ -523,10 +524,12 @@ IDataAdviseHolder* iface) { DataAdviseHolder *This = (DataAdviseHolder *)iface; + ULONG ref; + TRACE("(%p) (ref=%ld)\n", This, This->ref); - This->ref++; + ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/************************************************************************ @@ -538,24 +541,25 @@ IDataAdviseHolder* iface) { DataAdviseHolder *This = (DataAdviseHolder *)iface; + ULONG ref; TRACE("(%p) (ref=%ld)\n", This, This->ref);
/* * Decrease the reference count on this object. */ - This->ref--; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (This->ref==0) + if (ref==0) { DataAdviseHolder_Destructor(This);
return 0; }
- return This->ref; + return ref; }
/************************************************************************ Index: dlls/ole32/oleproxy.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/oleproxy.c,v retrieving revision 1.21 diff -u -r1.21 oleproxy.c --- dlls/ole32/oleproxy.c 9 Sep 2004 21:03:58 -0000 1.21 +++ dlls/ole32/oleproxy.c 23 Sep 2004 20:35:27 -0000 @@ -103,18 +103,20 @@ static ULONG WINAPI CFStub_AddRef(LPRPCSTUBBUFFER iface) { CFStub *This = (CFStub *)iface; + ULONG ref;
- This->ref++; - return This->ref; + ref = InterlockedIncrement(&This->ref); + return ref; }
static ULONG WINAPI CFStub_Release(LPRPCSTUBBUFFER iface) { CFStub *This = (CFStub *)iface; + ULONG ref;
- This->ref--; - if (This->ref) - return This->ref; + ref = InterlockedDecrement(&This->ref); + if (ref) + return ref; HeapFree(GetProcessHeap(),0,This); return 0; } @@ -286,18 +288,19 @@
static ULONG WINAPI IRpcProxyBufferImpl_AddRef(LPRPCPROXYBUFFER iface) { ICOM_THIS_MULTI(CFProxy,lpvtbl_proxy,iface); - return ++(This->ref); + return InterlockedIncrement(&This->ref); }
static ULONG WINAPI IRpcProxyBufferImpl_Release(LPRPCPROXYBUFFER iface) { ICOM_THIS_MULTI(CFProxy,lpvtbl_proxy,iface); + ULONG ref = InterlockedDecrement(&This->ref);
- if (!--(This->ref)) { + if (!ref) { IRpcChannelBuffer_Release(This->chanbuf);This->chanbuf = NULL; HeapFree(GetProcessHeap(),0,This); return 0; } - return This->ref; + return ref; }
static HRESULT WINAPI IRpcProxyBufferImpl_Connect(LPRPCPROXYBUFFER iface,IRpcChannelBuffer* pRpcChannelBuffer) { @@ -330,16 +333,19 @@ }
static ULONG WINAPI CFProxy_AddRef(LPCLASSFACTORY iface) { + ULONG ref; ICOM_THIS_MULTI(CFProxy,lpvtbl_cf,iface); - This->ref++; - return This->ref; + ref = InterlockedIncrement(&This->ref); + return ref; }
static ULONG WINAPI CFProxy_Release(LPCLASSFACTORY iface) { + ULONG ref; ICOM_THIS_MULTI(CFProxy,lpvtbl_cf,iface); - This->ref--; - if (This->ref) - return This->ref; + + ref = InterlockedDecrement(&This->ref); + if (ref) + return ref; HeapFree(GetProcessHeap(),0,This); return 0; } Index: dlls/ole32/rpc.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/rpc.c,v retrieving revision 1.26 diff -u -r1.26 rpc.c --- dlls/ole32/rpc.c 9 Sep 2004 21:03:58 -0000 1.26 +++ dlls/ole32/rpc.c 23 Sep 2004 20:35:28 -0000 @@ -286,20 +286,22 @@ static ULONG WINAPI PipeBuf_AddRef(LPRPCCHANNELBUFFER iface) { PipeBuf *This = (PipeBuf *)iface; - This->ref++; - return This->ref; + ULONG ref; + ref = InterlockedIncrement(&This->ref); + return ref; }
static ULONG WINAPI PipeBuf_Release(LPRPCCHANNELBUFFER iface) { PipeBuf *This = (PipeBuf *)iface; + ULONG ref; wine_rpc_disconnect_header header; HANDLE pipe; DWORD reqtype = REQTYPE_DISCONNECT;
- This->ref--; - if (This->ref) - return This->ref; + ref = InterlockedDecrement(&This->ref); + if (ref) + return ref;
FIXME("Free all stuff\n");
Index: dlls/ole32/stg_stream.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/stg_stream.c,v retrieving revision 1.21 diff -u -r1.21 stg_stream.c --- dlls/ole32/stg_stream.c 23 Aug 2004 19:39:50 -0000 1.21 +++ dlls/ole32/stg_stream.c 23 Sep 2004 20:35:28 -0000 @@ -222,9 +222,10 @@ { StgStreamImpl* const This=(StgStreamImpl*)iface;
- This->ref++; + ULONG ref; + ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/*** @@ -236,21 +237,19 @@ { StgStreamImpl* const This=(StgStreamImpl*)iface;
- ULONG newRef; + ULONG ref;
- This->ref--; - - newRef = This->ref; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (newRef==0) + if (ref==0) { StgStreamImpl_Destroy(This); }
- return newRef; + return ref; }
/*** Index: dlls/ole32/storage.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/storage.c,v retrieving revision 1.42 diff -u -r1.42 storage.c --- dlls/ole32/storage.c 22 Sep 2004 02:46:40 -0000 1.42 +++ dlls/ole32/storage.c 23 Sep 2004 20:35:29 -0000 @@ -986,7 +986,7 @@ */ ULONG WINAPI IStream16_fnAddRef(IStream16* iface) { IStream16Impl *This = (IStream16Impl *)iface; - return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -994,15 +994,16 @@ */ ULONG WINAPI IStream16_fnRelease(IStream16* iface) { IStream16Impl *This = (IStream16Impl *)iface; + ULONG ref; FlushFileBuffers(This->hf); - This->ref--; - if (!This->ref) { + ref = InterlockedDecrement(&This->ref); + if (!ref) { CloseHandle(This->hf); UnMapLS( This->thisptr ); HeapFree( GetProcessHeap(), 0, This ); return 0; } - return This->ref; + return ref; }
/****************************************************************************** @@ -1480,7 +1481,7 @@ */ ULONG WINAPI IStream_fnAddRef(IStream* iface) { IStream32Impl *This = (IStream32Impl *)iface; - return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -1488,14 +1489,15 @@ */ ULONG WINAPI IStream_fnRelease(IStream* iface) { IStream32Impl *This = (IStream32Impl *)iface; + ULONG ref; FlushFileBuffers(This->hf); - This->ref--; - if (!This->ref) { + ref = InterlockedDecrement(&This->ref); + if (!ref) { CloseHandle(This->hf); HeapFree( GetProcessHeap(), 0, This ); return 0; } - return This->ref; + return ref; }
/* --- IStorage16 implementation */ @@ -1534,7 +1536,7 @@ */ ULONG WINAPI IStorage16_fnAddRef(IStorage16* iface) { IStorage16Impl *This = (IStorage16Impl *)iface; - return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -1542,9 +1544,10 @@ */ ULONG WINAPI IStorage16_fnRelease(IStorage16* iface) { IStorage16Impl *This = (IStorage16Impl *)iface; - This->ref--; - if (This->ref) - return This->ref; + ULONG ref; + ref = InterlockedDecrement(&This->ref); + if (ref) + return ref; UnMapLS( This->thisptr ); HeapFree( GetProcessHeap(), 0, This ); return 0; Index: dlls/ole32/storage32.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/storage32.c,v retrieving revision 1.59 diff -u -r1.59 storage32.c --- dlls/ole32/storage32.c 22 Sep 2004 02:46:40 -0000 1.59 +++ dlls/ole32/storage32.c 23 Sep 2004 20:35:34 -0000 @@ -291,9 +291,9 @@ IStorage* iface) { StorageBaseImpl *This = (StorageBaseImpl *)iface; - This->ref++; + ULONG ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/************************************************************************ @@ -311,12 +311,12 @@ /* * Decrease the reference count on this object. */ - This->ref--; + ULONG ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (This->ref==0) + if (ref == 0) { /* * Since we are using a system of base-classes, we want to call the @@ -328,7 +328,7 @@ return 0; }
- return This->ref; + return ref; }
/************************************************************************ @@ -3638,8 +3638,8 @@ { IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
- This->ref++; - return This->ref; + ULONG ref = InterlockedIncrement(&This->ref); + return ref; }
ULONG WINAPI IEnumSTATSTGImpl_Release( @@ -3649,8 +3649,7 @@
ULONG newRef;
- This->ref--; - newRef = This->ref; + newRef = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. Index: dlls/oleaut32/connpt.c =================================================================== RCS file: /home/wine/wine/dlls/oleaut32/connpt.c,v retrieving revision 1.12 diff -u -r1.12 connpt.c --- dlls/oleaut32/connpt.c 9 Sep 2004 21:03:58 -0000 1.12 +++ dlls/oleaut32/connpt.c 23 Sep 2004 20:35:34 -0000 @@ -193,10 +193,11 @@ static ULONG WINAPI ConnectionPointImpl_AddRef(IConnectionPoint* iface) { ConnectionPointImpl *This = (ConnectionPointImpl *)iface; + ULONG ref; TRACE("(%p)->(ref=%ld)\n", This, This->ref); - This->ref++; + ref = InterlockedIncrement(&This->ref);
- return This->ref; + return ref; }
/************************************************************************ @@ -208,24 +209,25 @@ IConnectionPoint* iface) { ConnectionPointImpl *This = (ConnectionPointImpl *)iface; + ULONG ref; TRACE("(%p)->(ref=%ld)\n", This, This->ref);
/* * Decrease the reference count on this object. */ - This->ref--; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (This->ref==0) + if (ref == 0) { ConnectionPointImpl_Destroy(This);
return 0; }
- return This->ref; + return ref; }
/************************************************************************ @@ -473,10 +475,11 @@ static ULONG WINAPI EnumConnectionsImpl_AddRef(IEnumConnections* iface) { EnumConnectionsImpl *This = (EnumConnectionsImpl *)iface; + ULONG ref; TRACE("(%p)->(ref=%ld)\n", This, This->ref); - This->ref++; + ref = InterlockedIncrement(&This->ref); IUnknown_AddRef(This->pUnk); - return This->ref; + return ref; }
/************************************************************************ @@ -487,6 +490,7 @@ static ULONG WINAPI EnumConnectionsImpl_Release(IEnumConnections* iface) { EnumConnectionsImpl *This = (EnumConnectionsImpl *)iface; + ULONG ref; TRACE("(%p)->(ref=%ld)\n", This, This->ref);
IUnknown_Release(This->pUnk); @@ -494,19 +498,19 @@ /* * Decrease the reference count on this object. */ - This->ref--; + ref = InterlockedDecrement(&This->ref);
/* * If the reference count goes down to 0, perform suicide. */ - if (This->ref==0) + if (ref == 0) { EnumConnectionsImpl_Destroy(This);
return 0; }
- return This->ref; + return ref; }
/************************************************************************ Index: dlls/oleaut32/dispatch.c =================================================================== RCS file: /home/wine/wine/dlls/oleaut32/dispatch.c,v retrieving revision 1.20 diff -u -r1.20 dispatch.c --- dlls/oleaut32/dispatch.c 9 Sep 2004 21:03:58 -0000 1.20 +++ dlls/oleaut32/dispatch.c 23 Sep 2004 20:35:35 -0000 @@ -278,7 +278,7 @@ StdDispatch *This = (StdDispatch *)iface; TRACE("()\n");
- return ++This->ref; + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -289,18 +289,18 @@ static ULONG WINAPI StdDispatch_Release(LPDISPATCH iface) { StdDispatch *This = (StdDispatch *)iface; - ULONG ret; + ULONG ref; TRACE("(%p)->()\n", This);
- ret = This->ref--; + ref = InterlockedDecrement(&This->ref);
- if (This->ref == 0) + if (ref == 0) { ITypeInfo_Release(This->pTypeInfo); CoTaskMemFree(This); }
- return ret; + return ref; }
/****************************************************************************** Index: dlls/urlmon/umon.c =================================================================== RCS file: /home/wine/wine/dlls/urlmon/umon.c,v retrieving revision 1.41 diff -u -r1.41 umon.c --- dlls/urlmon/umon.c 22 Sep 2004 02:46:39 -0000 1.41 +++ dlls/urlmon/umon.c 23 Sep 2004 20:35:36 -0000 @@ -197,7 +197,7 @@
TRACE("(%p)\n",This);
- return ++(This->ref); + return InterlockedIncrement(&This->ref); }
/****************************************************************************** @@ -206,19 +206,20 @@ static ULONG WINAPI URLMonikerImpl_Release(IMoniker* iface) { URLMonikerImpl *This = (URLMonikerImpl *)iface; + ULONG ref;
TRACE("(%p)\n",This);
- This->ref--; + ref = InterlockedDecrement(&This->ref);
/* destroy the object if there's no more reference on it */ - if (This->ref==0){ + if (ref == 0){
URLMonikerImpl_Destroy(This);
return 0; } - return This->ref; + return ref; }
/******************************************************************************