--- mozilla/security/nss/lib/nss/nssinit.c.784672 2012-01-26 14:43:46.232357231 -0800 +++ mozilla/security/nss/lib/nss/nssinit.c.784672 2012-01-26 14:50:55.830512565 -0800 @@ -944,6 +944,12 @@ NSS_RegisterShutdown(NSS_ShutdownFunc sF { int i; + /* make sure our lock and condition variable are initialized one and only + * one time */ + if (PR_CallOnce(&nssInitOnce, nss_doLockInit) != PR_SUCCESS) { + return SECFailure; + } + PZ_Lock(nssInitLock); if (!NSS_IsInitialized()) { PZ_Unlock(nssInitLock); @@ -1002,6 +1008,11 @@ NSS_UnregisterShutdown(NSS_ShutdownFunc { int i; + /* make sure our lock and condition variable are initialized one and only + * one time */ + if (PR_CallOnce(&nssInitOnce, nss_doLockInit) != PR_SUCCESS) { + return SECFailure; + } PZ_Lock(nssInitLock); if (!NSS_IsInitialized()) { PZ_Unlock(nssInitLock); @@ -1192,6 +1203,11 @@ NSS_ShutdownContext(NSSInitContext *cont { SECStatus rv = SECSuccess; + /* make sure our lock and condition variable are initialized one and only + * one time */ + if (PR_CallOnce(&nssInitOnce, nss_doLockInit) != PR_SUCCESS) { + return SECFailure; + } PZ_Lock(nssInitLock); /* If one or more threads are in the middle of init, wait for them * to complete */