if (PR_AtomicDecrement(&symKey->refCount) == -1) {
if (PR_AtomicDecrement(&symKey->refCount) == 0) {
PK11_FreeSymKey(PK11SymKey *symKey){    PRBool destroy = PR_FALSE;    PK11SlotInfo *slot;    PRBool freeit = PR_TRUE;    if (PR_AtomicDecrement(&symKey->refCount) == -1) {	destroy= PR_TRUE;    }    if (destroy) {	if ((symKey->owner) && symKey->objectID != CK_INVALID_HANDLE) {	    pk11_EnterKeyMonitor(symKey);	    (void) PK11_GETTAB(symKey->slot)->		C_DestroyObject(symKey->session, symKey->objectID);	    pk11_ExitKeyMonitor(symKey);	}	if (symKey->data.data) {	    PORT_Memset(symKey->data.data, 0, symKey->data.len);	    PORT_Free(symKey->data.data);	}        slot = symKey->slot;	if (slot->keyCount < slot->maxKeyCount) {            PK11_USE_THREADS(PZ_Lock(slot->freeListLock);)	    symKey->next = slot->freeSymKeysHead;	    slot->freeSymKeysHead = symKey;	    PK11_USE_THREADS(PZ_Unlock(slot->freeListLock);)	    PR_AtomicIncrement(&slot->keyCount);	    symKey->slot = NULL;	    freeit = PR_FALSE;        }        if (freeit) {	    pk11_CloseSession(symKey->slot, symKey->session,							symKey->sessionOwner);	    PK11_USE_THREADS(PZ_DestroyLock(symKey->refLock);)	    PORT_Free(symKey);	}	PK11_FreeSlot(slot);    }}