summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtc%netscape.com <devnull@localhost>2002-05-04 00:24:31 +0000
committerwtc%netscape.com <devnull@localhost>2002-05-04 00:24:31 +0000
commit9f1a1c72ab406467081c295fcfd5a6a5b78aa49e (patch)
tree3299c01c3403dd377bd955020d0ce7bd49d2dac5
parent8001bfb261a677ef1924a26c36ca552dba86e959 (diff)
downloadnss-hg-9f1a1c72ab406467081c295fcfd5a6a5b78aa49e.tar.gz
Merged the fix for bug 126087 on the NSS_3_4_BRANCH.
Modified files: pk11skey.c secmodti.h
-rw-r--r--security/nss/lib/pk11wrap/pk11skey.c19
-rw-r--r--security/nss/lib/pk11wrap/secmodti.h3
2 files changed, 3 insertions, 19 deletions
diff --git a/security/nss/lib/pk11wrap/pk11skey.c b/security/nss/lib/pk11wrap/pk11skey.c
index b77b718fb..f2530f481 100644
--- a/security/nss/lib/pk11wrap/pk11skey.c
+++ b/security/nss/lib/pk11wrap/pk11skey.c
@@ -180,11 +180,6 @@ pk11_getKeyFromList(PK11SlotInfo *slot) {
if (symKey == NULL) {
return NULL;
}
- symKey->refLock = PZ_NewLock(nssILockRefLock);
- if (symKey->refLock == NULL) {
- PORT_Free(symKey);
- return NULL;
- }
symKey->session = pk11_GetNewSession(slot,&symKey->sessionOwner);
symKey->next = NULL;
return symKey;
@@ -199,7 +194,6 @@ PK11_CleanKeyList(PK11SlotInfo *slot)
symKey = slot->freeSymKeysHead;
slot->freeSymKeysHead = symKey->next;
pk11_CloseSession(slot, symKey->session,symKey->sessionOwner);
- PK11_USE_THREADS(PZ_DestroyLock(symKey->refLock);)
PORT_Free(symKey);
};
return;
@@ -243,16 +237,10 @@ PK11_CreateSymKey(PK11SlotInfo *slot, CK_MECHANISM_TYPE type, void *wincx)
void
PK11_FreeSymKey(PK11SymKey *symKey)
{
- PRBool destroy = PR_FALSE;
PK11SlotInfo *slot;
PRBool freeit = PR_TRUE;
- PK11_USE_THREADS(PZ_Lock(symKey->refLock);)
- if (symKey->refCount-- == 1) {
- destroy= PR_TRUE;
- }
- PK11_USE_THREADS(PZ_Unlock(symKey->refLock);)
- if (destroy) {
+ if (PR_AtomicDecrement(&symKey->refCount) == 0) {
if ((symKey->owner) && symKey->objectID != CK_INVALID_HANDLE) {
pk11_EnterKeyMonitor(symKey);
(void) PK11_GETTAB(symKey->slot)->
@@ -276,7 +264,6 @@ PK11_FreeSymKey(PK11SymKey *symKey)
if (freeit) {
pk11_CloseSession(symKey->slot, symKey->session,
symKey->sessionOwner);
- PK11_USE_THREADS(PZ_DestroyLock(symKey->refLock);)
PORT_Free(symKey);
}
PK11_FreeSlot(slot);
@@ -286,9 +273,7 @@ PK11_FreeSymKey(PK11SymKey *symKey)
PK11SymKey *
PK11_ReferenceSymKey(PK11SymKey *symKey)
{
- PK11_USE_THREADS(PZ_Lock(symKey->refLock);)
- symKey->refCount++;
- PK11_USE_THREADS(PZ_Unlock(symKey->refLock);)
+ PR_AtomicIncrement(&symKey->refCount);
return symKey;
}
diff --git a/security/nss/lib/pk11wrap/secmodti.h b/security/nss/lib/pk11wrap/secmodti.h
index 9d3919903..a2e81acc6 100644
--- a/security/nss/lib/pk11wrap/secmodti.h
+++ b/security/nss/lib/pk11wrap/secmodti.h
@@ -145,8 +145,7 @@ struct PK11SymKeyStr {
SECItem data; /* raw key data if available */
CK_SESSION_HANDLE session;
PRBool sessionOwner;
- int refCount; /* number of references to this key */
- PZLock *refLock;
+ PRInt32 refCount; /* number of references to this key */
int size; /* key size in bytes */
PK11Origin origin; /* where this key came from
(see def in secmodt.h) */