barrier = (MXUserBarrier *) Atomic_ReadPtr(barrierStorage);
if (UNLIKELY(barrier == NULL)) {
- MXUserBarrier *before;
+ MXUserBarrier *newBarrier = MXUser_CreateBarrier(name, rank, count);
- barrier = MXUser_CreateBarrier(name, rank, count);
+ barrier = (MXUserBarrier *) Atomic_ReadIfEqualWritePtr(barrierStorage,
+ NULL,
+ (void *) newBarrier);
- before = (MXUserBarrier *) Atomic_ReadIfEqualWritePtr(barrierStorage,
- NULL,
- (void *) barrier);
-
- if (before) {
- MXUser_DestroyBarrier(barrier);
-
- barrier = before;
+ if (barrier) {
+ MXUser_DestroyBarrier(newBarrier);
+ } else {
+ barrier = (MXUserBarrier *) Atomic_ReadPtr(barrierStorage);
}
}
lock = (MXUserExclLock *) Atomic_ReadPtr(lockStorage);
if (UNLIKELY(lock == NULL)) {
- MXUserExclLock *newLock;
-
- newLock = MXUser_CreateExclLock(name, rank);
+ MXUserExclLock *newLock = MXUser_CreateExclLock(name, rank);
lock = (MXUserExclLock *) Atomic_ReadIfEqualWritePtr(lockStorage, NULL,
(void *) newLock);
lock = (MXUserRWLock *) Atomic_ReadPtr(lockStorage);
if (UNLIKELY(lock == NULL)) {
- MXUserRWLock *newLock;
-
- newLock = MXUser_CreateRWLock(name, rank);
+ MXUserRWLock *newLock = MXUser_CreateRWLock(name, rank);
lock = (MXUserRWLock *) Atomic_ReadIfEqualWritePtr(lockStorage, NULL,
(void *) newLock);
lock = (MXUserRecLock *) Atomic_ReadPtr(lockStorage);
if (UNLIKELY(lock == NULL)) {
- MXUserRecLock *newLock;
-
- newLock = MXUser_CreateRecLock(name, rank);
+ MXUserRecLock *newLock = MXUser_CreateRecLock(name, rank);
lock = (MXUserRecLock *) Atomic_ReadIfEqualWritePtr(lockStorage, NULL,
(void *) newLock);
sema = (MXUserSemaphore *) Atomic_ReadPtr(semaStorage);
if (UNLIKELY(sema == NULL)) {
- MXUserSemaphore *newSema;
-
- newSema = MXUser_CreateSemaphore(name, rank);
+ MXUserSemaphore *newSema = MXUser_CreateSemaphore(name, rank);
sema = (MXUserSemaphore *) Atomic_ReadIfEqualWritePtr(semaStorage,
NULL,