15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)--- a/nss/lib/ssl/ssl3con.c 2014-01-17 18:10:16.783281701 -0800 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+++ b/nss/lib/ssl/ssl3con.c 2014-01-17 18:11:03.734060469 -0800 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@@ -5678,7 +5678,6 @@ SSL3_ShutdownServerCache(void) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PZ_Unlock(symWrapKeysLock); 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- ssl_FreeSessionCacheLocks(); 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return SECSuccess; 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@@ -5730,7 +5729,7 @@ getWrappingKey( sslSocket * ss, 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pSymWrapKey = &symWrapKeys[symWrapMechIndex].symWrapKey[exchKeyType]; 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- ssl_InitSessionCacheLocks(PR_TRUE); 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ ssl_InitSessionCacheLocks(); 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PZ_Lock(symWrapKeysLock); 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)--- a/nss/lib/ssl/sslimpl.h 2014-01-17 18:10:16.793281867 -0800 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+++ b/nss/lib/ssl/sslimpl.h 2014-01-17 18:11:03.734060469 -0800 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@@ -1913,9 +1913,7 @@ extern SECStatus ssl_InitSymWrapKeysLock 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extern SECStatus ssl_FreeSymWrapKeysLock(void); 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-extern SECStatus ssl_InitSessionCacheLocks(PRBool lazyInit); 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-extern SECStatus ssl_FreeSessionCacheLocks(void); 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+extern SECStatus ssl_InitSessionCacheLocks(void); 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) /***************** platform client auth ****************/ 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)diff -pu a/nss/lib/ssl/sslnonce.c b/nss/lib/ssl/sslnonce.c 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)--- a/nss/lib/ssl/sslnonce.c 2014-01-17 17:59:03.242109996 -0800 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+++ b/nss/lib/ssl/sslnonce.c 2014-01-17 18:11:03.754060801 -0800 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)@@ -35,91 +35,55 @@ static PZLock * cacheLock = NULL; 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) #define LOCK_CACHE lock_cache() 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) #define UNLOCK_CACHE PZ_Unlock(cacheLock) 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)-static SECStatus 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-ssl_InitClientSessionCacheLock(void) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)-{ 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)- cacheLock = PZ_NewLock(nssILockCache); 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return cacheLock ? SECSuccess : SECFailure; 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-} 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static SECStatus 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-ssl_FreeClientSessionCacheLock(void) 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-{ 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (cacheLock) { 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)- PZ_DestroyLock(cacheLock); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)- cacheLock = NULL; 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECSuccess; 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- } 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PORT_SetError(SEC_ERROR_NOT_INITIALIZED); 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECFailure; 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-} 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static PRBool LocksInitializedEarly = PR_FALSE; 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static SECStatus 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-FreeSessionCacheLocks() 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-{ 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- SECStatus rv1, rv2; 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- rv1 = ssl_FreeSymWrapKeysLock(); 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- rv2 = ssl_FreeClientSessionCacheLock(); 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if ( (SECSuccess == rv1) && (SECSuccess == rv2) ) { 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECSuccess; 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- } 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECFailure; 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-} 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+static PRCallOnceType lockOnce; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+/* FreeSessionCacheLocks is a callback from NSS_RegisterShutdown which destroys 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ * the session cache locks on shutdown and resets them to their initial 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ * state. */ 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static SECStatus 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-InitSessionCacheLocks(void) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+FreeSessionCacheLocks(void* appData, void* nssData) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- SECStatus rv1, rv2; 8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PRErrorCode rc; 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- rv1 = ssl_InitSymWrapKeysLock(); 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- rv2 = ssl_InitClientSessionCacheLock(); 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if ( (SECSuccess == rv1) && (SECSuccess == rv2) ) { 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECSuccess; 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- } 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- rc = PORT_GetError(); 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- FreeSessionCacheLocks(); 9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PORT_SetError(rc); 9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECFailure; 9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-} 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ static const PRCallOnceType pristineCallOnce; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ SECStatus rv; 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-/* free the session cache locks if they were initialized early */ 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-SECStatus 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-ssl_FreeSessionCacheLocks() 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-{ 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PORT_Assert(PR_TRUE == LocksInitializedEarly); 10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (!LocksInitializedEarly) { 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ if (!cacheLock) { 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PORT_SetError(SEC_ERROR_NOT_INITIALIZED); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return SECFailure; 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- FreeSessionCacheLocks(); 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- LocksInitializedEarly = PR_FALSE; 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECSuccess; 11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-} 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static PRCallOnceType lockOnce; 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ PZ_DestroyLock(cacheLock); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ cacheLock = NULL; 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-/* free the session cache locks if they were initialized lazily */ 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static SECStatus ssl_ShutdownLocks(void* appData, void* nssData) 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-{ 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PORT_Assert(PR_FALSE == LocksInitializedEarly); 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (LocksInitializedEarly) { 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECFailure; 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ rv = ssl_FreeSymWrapKeysLock(); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ if (rv != SECSuccess) { 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ return rv; 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- FreeSessionCacheLocks(); 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- memset(&lockOnce, 0, sizeof(lockOnce)); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ lockOnce = pristineCallOnce; 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return SECSuccess; 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static PRStatus initSessionCacheLocksLazily(void) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+/* InitSessionCacheLocks is called, protected by lockOnce, to create the 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ * session cache locks. */ 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+static PRStatus 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+InitSessionCacheLocks(void) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- SECStatus rv = InitSessionCacheLocks(); 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (SECSuccess != rv) { 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ SECStatus rv; 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ cacheLock = PZ_NewLock(nssILockCache); 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ if (cacheLock == NULL) { 14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PR_FAILURE; 14868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- rv = NSS_RegisterShutdown(ssl_ShutdownLocks, NULL); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ rv = ssl_InitSymWrapKeysLock(); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ if (rv != SECSuccess) { 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ PRErrorCode error = PORT_GetError(); 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ PZ_DestroyLock(cacheLock); 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ cacheLock = NULL; 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ PORT_SetError(error); 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ return PR_FAILURE; 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+ } 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ rv = NSS_RegisterShutdown(FreeSessionCacheLocks, NULL); 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PORT_Assert(SECSuccess == rv); 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (SECSuccess != rv) { 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PR_FAILURE; 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@@ -127,34 +91,18 @@ static PRStatus initSessionCacheLocksLaz 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PR_SUCCESS; 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-/* lazyInit means that the call is not happening during a 1-time 16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- * initialization function, but rather during dynamic, lazy initialization 16968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- */ 17068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SECStatus 17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-ssl_InitSessionCacheLocks(PRBool lazyInit) 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ssl_InitSessionCacheLocks(void) 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (LocksInitializedEarly) { 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECSuccess; 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- } 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (lazyInit) { 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return (PR_SUCCESS == 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- PR_CallOnce(&lockOnce, initSessionCacheLocksLazily)) ? 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- SECSuccess : SECFailure; 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- } 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- if (SECSuccess == InitSessionCacheLocks()) { 18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- LocksInitializedEarly = PR_TRUE; 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECSuccess; 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- } 18868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- 18968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- return SECFailure; 19068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ return (PR_SUCCESS == 19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ PR_CallOnce(&lockOnce, InitSessionCacheLocks)) ? 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ SECSuccess : SECFailure; 19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 19568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)-static void 19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+static void 19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) lock_cache(void) 19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { 19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- ssl_InitSessionCacheLocks(PR_TRUE); 20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ ssl_InitSessionCacheLocks(); 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PZ_Lock(cacheLock); 20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 20368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)diff -pu a/nss/lib/ssl/sslsnce.c b/nss/lib/ssl/sslsnce.c 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)--- a/nss/lib/ssl/sslsnce.c 2014-01-17 17:49:26.072517368 -0800 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)+++ b/nss/lib/ssl/sslsnce.c 2014-01-17 18:11:03.774061133 -0800 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@@ -1353,7 +1353,7 @@ SSL_ConfigServerSessionIDCache( int 20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PRUint32 ssl3_timeout, 20968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const char * directory) 21068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { 21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- ssl_InitSessionCacheLocks(PR_FALSE); 21268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ ssl_InitSessionCacheLocks(); 21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return SSL_ConfigServerSessionIDCacheInstance(&globalCache, 21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) maxCacheEntries, ssl2_timeout, ssl3_timeout, directory, PR_FALSE); 21568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 21668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)@@ -1467,7 +1467,7 @@ SSL_ConfigServerSessionIDCacheWithOpt( 21768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PRBool enableMPCache) 21868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { 21968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!enableMPCache) { 22068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- ssl_InitSessionCacheLocks(PR_FALSE); 22168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ ssl_InitSessionCacheLocks(); 22268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return ssl_ConfigServerSessionIDCacheInstanceWithOpt(&globalCache, 22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ssl2_timeout, ssl3_timeout, directory, PR_FALSE, 22468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) maxCacheEntries, maxCertCacheEntries, maxSrvNameCacheEntries); 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@@ -1512,7 +1512,7 @@ SSL_InheritMPServerSIDCacheInstance(cach 22668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return SECSuccess; /* already done. */ 22768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 22868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)- ssl_InitSessionCacheLocks(PR_FALSE); 23068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)+ ssl_InitSessionCacheLocks(); 23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ssl_sid_lookup = ServerSessionIDLookup; 23368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ssl_sid_cache = ServerSessionIDCache; 234