зеркало из https://github.com/mozilla/pjs.git
Fix for bug 270689 - race condition in softoken list lock creation . r=nelson
This commit is contained in:
Родитель
1d55e6f30b
Коммит
8a575b727a
|
@ -2833,6 +2833,9 @@ CK_RV nsc_CommonInitialize(CK_VOID_PTR pReserved, PRBool isFIPS)
|
|||
loser:
|
||||
secmod_freeParams(¶mStrings);
|
||||
}
|
||||
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) {
|
||||
|
@ -2162,6 +2158,22 @@ pk11_freeObjectData(PK11Object *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)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче