rsaenh: Use Interlocked functions for reference counting.

This commit is contained in:
Juan Lang 2006-07-28 07:46:11 -07:00 committed by Alexandre Julliard
parent eb3028acc0
commit 669b0a5226
2 changed files with 6 additions and 4 deletions

View File

@ -253,7 +253,7 @@ int alloc_handle(HANDLETABLE *lpTable, OBJECTHDR *lpObject, unsigned int *lpHand
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, unsigned int handle, DWORD dwType)
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;

View File

@ -36,7 +36,7 @@ typedef void (*DESTRUCTOR)(OBJECTHDR *object);
struct tagOBJECTHDR
{
DWORD dwType;
UINT refcount;
LONG refcount;
DESTRUCTOR destructor;
};