diff options
-rw-r--r-- | security/nss/lib/util/nsslocks.c | 8 | ||||
-rw-r--r-- | security/nss/lib/util/nssrwlk.c | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/security/nss/lib/util/nsslocks.c b/security/nss/lib/util/nsslocks.c index ce9072c68..8b158e025 100644 --- a/security/nss/lib/util/nsslocks.c +++ b/security/nss/lib/util/nsslocks.c @@ -60,7 +60,9 @@ __nss_InitLock( PZLock **ppLock, nssILockType ltype ) while (!*ppLock) { PRInt32 myAttempt = PR_AtomicIncrement(&initializers); if (myAttempt == 1) { - *ppLock = PZ_NewLock(ltype); + if (!*ppLock) { + *ppLock = PZ_NewLock(ltype); + } (void) PR_AtomicDecrement(&initializers); break; } @@ -93,7 +95,9 @@ nss_InitMonitor(PZMonitor **ppMonitor, nssILockType ltype ) while (!*ppMonitor) { PRInt32 myAttempt = PR_AtomicIncrement(&initializers); if (myAttempt == 1) { - *ppMonitor = PZ_NewMonitor(ltype); + if (!*ppMonitor) { + *ppMonitor = PZ_NewMonitor(ltype); + } (void) PR_AtomicDecrement(&initializers); break; } diff --git a/security/nss/lib/util/nssrwlk.c b/security/nss/lib/util/nssrwlk.c index 33aaaa713..421d43d87 100644 --- a/security/nss/lib/util/nssrwlk.c +++ b/security/nss/lib/util/nssrwlk.c @@ -185,7 +185,9 @@ nssRWLock_AtomicCreate( NSSRWLock ** prwlock, while (NULL == (rwlock = *prwlock)) { PRInt32 myAttempt = PR_AtomicIncrement(&initializers); if (myAttempt == 1) { - *prwlock = rwlock = NSSRWLock_New(lock_rank, lock_name); + if (NULL == (rwlock = *prwlock)) { + *prwlock = rwlock = NSSRWLock_New(lock_rank, lock_name); + } (void) PR_AtomicDecrement(&initializers); break; } |