зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
13929a4063
Коммит
ec68ee33b1
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче