Commit 669b0a52 authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

rsaenh: Use Interlocked functions for reference counting.

parent eb3028ac
......@@ -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;
......
......@@ -36,7 +36,7 @@ typedef void (*DESTRUCTOR)(OBJECTHDR *object);
struct tagOBJECTHDR
{
DWORD dwType;
UINT refcount;
LONG refcount;
DESTRUCTOR destructor;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment