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