Juan Lang : rsaenh: Use Interlocked functions for reference counting.

Alexandre Julliard julliard at wine.codeweavers.com
Sat Jul 29 05:22:14 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 669b0a52268ee116fee74bc2ae73e89e65632546
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=669b0a52268ee116fee74bc2ae73e89e65632546

Author: Juan Lang <juan_lang at yahoo.com>
Date:   Fri Jul 28 07:46:11 2006 -0700

rsaenh: Use Interlocked functions for reference counting.

---

 dlls/rsaenh/handle.c |    8 +++++---
 dlls/rsaenh/handle.h |    2 +-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/rsaenh/handle.c b/dlls/rsaenh/handle.c
index 01746a6..d924c2d 100644
--- a/dlls/rsaenh/handle.c
+++ b/dlls/rsaenh/handle.c
@@ -253,7 +253,7 @@ int alloc_handle(HANDLETABLE *lpTable, O
     
     lpTable->paEntries[lpTable->iFirstFree].pObject = lpObject;
     lpTable->iFirstFree = lpTable->paEntries[lpTable->iFirstFree].iNextFree;
-    lpObject->refcount++;
+    InterlockedIncrement(&lpObject->refcount);
 
     ret = 1;
 exit:
@@ -296,10 +296,12 @@ int release_handle(HANDLETABLE *lpTable,
         goto exit;
 
     pObject = lpTable->paEntries[index].pObject;
-    pObject->refcount--;
-    if (pObject->refcount == 0)
+    if (InterlockedDecrement(&pObject->refcount) == 0)
+    {
+        TRACE("destroying handle %d\n", handle);
         if (pObject->destructor)
             pObject->destructor(pObject);
+    }
 
     lpTable->paEntries[index].pObject = NULL;
     lpTable->paEntries[index].iNextFree = lpTable->iFirstFree;
diff --git a/dlls/rsaenh/handle.h b/dlls/rsaenh/handle.h
index 14febf9..6fa9639 100644
--- a/dlls/rsaenh/handle.h
+++ b/dlls/rsaenh/handle.h
@@ -36,7 +36,7 @@ typedef void (*DESTRUCTOR)(OBJECTHDR *ob
 struct tagOBJECTHDR
 {
     DWORD       dwType;
-    UINT        refcount;
+    LONG        refcount;
     DESTRUCTOR  destructor;
 };
 




More information about the wine-cvs mailing list