Fix for bug 270689 - race condition in softoken list lock creation . r=nelson

This commit is contained in:
julien.pierre.bugs%sun.com 2004-12-08 01:13:54 +00:00
Родитель 1d55e6f30b
Коммит 8a575b727a
3 изменённых файлов: 21 добавлений и 4 удалений

Просмотреть файл

@ -2833,6 +2833,9 @@ CK_RV nsc_CommonInitialize(CK_VOID_PTR pReserved, PRBool isFIPS)
loser:
secmod_freeParams(&paramStrings);
}
if (CKR_OK == crv) {
pk11_InitFreeLists();
}
return crv;
}
@ -3062,6 +3065,7 @@ CK_RV NSC_GetMechanismList(CK_SLOT_ID slotID,
CK_ULONG i;
switch (slotID) {
/* default: */
case NETSCAPE_SLOT_ID:
*pulCount = mechanismCount;
if (pMechanismList != NULL) {

Просмотреть файл

@ -640,6 +640,7 @@ extern PK11Session *pk11_NewSession(CK_SLOT_ID slotID, CK_NOTIFY notify,
extern void pk11_update_state(PK11Slot *slot,PK11Session *session);
extern void pk11_update_all_states(PK11Slot *slot);
extern void pk11_FreeContext(PK11SessionContext *context);
extern void pk11_InitFreeLists(void);
extern void pk11_CleanupFreeLists(void);
extern NSSLOWKEYPublicKey *pk11_GetPubKey(PK11Object *object,

Просмотреть файл

@ -2095,10 +2095,6 @@ pk11_GetObjectFromList(PRBool *hasLocks, PRBool optimizeSpace,
int size = 0;
if (!optimizeSpace) {
if (list->lock == NULL) {
list->lock = PZ_NewLock(nssILockObject);
}
PK11_USE_THREADS(PZ_Lock(list->lock));
object = list->head;
if (object) {
@ -2161,6 +2157,22 @@ pk11_freeObjectData(PK11Object *object) {
PORT_Free(object);
return next;
}
static void
pk11_InitFreeList(PK11ObjectFreeList *list)
{
#ifdef PKCS11_USE_THREADS
list->lock = PZ_NewLock(nssILockObject);
#else
list->lock = NULL;
#endif
}
void pk11_InitFreeLists(void)
{
pk11_InitFreeList(&sessionObjectList);
pk11_InitFreeList(&tokenObjectList);
}
static void
pk11_CleanupFreeList(PK11ObjectFreeList *list, PRBool isSessionList)