[NSS] Bug 1508776 - Remove unneeded refcounting from SFTKSession

SFTKSession objects are only ever actually destroyed at PK11 session
closure, as the session is always the final holder -- and asserting
refCount == 1 shows that to be true. Because of that, NSC_CloseSession
can just call `sftk_DestroySession` directly and leave
`sftk_FreeSession` as a no-op to be removed in the future.
This commit is contained in:
J.C. Jones 2019-12-06 15:36:44 +01:00 committed by Roy Tam
commit 0916deba59
3 changed files with 11 additions and 23 deletions

View file

@ -1772,7 +1772,6 @@ sftk_NewSession(CK_SLOT_ID slotID, CK_NOTIFY notify, CK_VOID_PTR pApplication,
return NULL;
session->next = session->prev = NULL;
session->refCount = 1;
session->enc_context = NULL;
session->hash_context = NULL;
session->sign_context = NULL;
@ -1796,11 +1795,10 @@ sftk_NewSession(CK_SLOT_ID slotID, CK_NOTIFY notify, CK_VOID_PTR pApplication,
}
/* free all the data associated with a session. */
static void
void
sftk_DestroySession(SFTKSession *session)
{
SFTKObjectList *op, *next;
PORT_Assert(session->refCount == 0);
/* clean out the attributes */
/* since no one is referencing us, it's safe to walk the chain
@ -1844,31 +1842,20 @@ sftk_SessionFromHandle(CK_SESSION_HANDLE handle)
PZ_Lock(lock);
sftkqueue_find(session, handle, slot->head, slot->sessHashSize);
if (session)
session->refCount++;
PZ_Unlock(lock);
return (session);
}
/*
* release a reference to a session handle
* release a reference to a session handle. This method of using SFTKSessions
* is deprecated, but the pattern should be retained until a future effort
* to refactor all SFTKSession users at once is completed.
*/
void
sftk_FreeSession(SFTKSession *session)
{
PRBool destroy = PR_FALSE;
SFTKSlot *slot = sftk_SlotFromSession(session);
PZLock *lock = SFTK_SESSION_LOCK(slot, session->handle);
PZ_Lock(lock);
if (session->refCount == 1)
destroy = PR_TRUE;
session->refCount--;
PZ_Unlock(lock);
if (destroy)
sftk_DestroySession(session);
return;
}
void