Bugzilla bug 237934: in nss_InitLock, nss_InitMonitor, and

NSSRWLock_AtomicCreate, we need to doublecheck the lock/monitor's pointer
after we acquired the spin lock.  r=nelsonb,jpierre.
Modified Files: nsslocks.c nssrwlk.c
This commit is contained in:
wchang0222%aol.com 2004-03-27 01:08:15 +00:00
Родитель 13929a4063
Коммит ec68ee33b1
2 изменённых файлов: 10 добавлений и 4 удалений

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

@ -36,7 +36,7 @@
*
* NOTE - These are not public interfaces
*
* $Id: nsslocks.c,v 1.3 2001/01/30 21:02:28 wtc%netscape.com Exp $
* $Id: nsslocks.c,v 1.4 2004/03/27 01:08:15 wchang0222%aol.com Exp $
*/
#include "seccomon.h"
@ -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;
}

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

@ -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;
}