1
1

More fixes for atomic from George. He swears it will work now.

This commit was SVN r3416.
Этот коммит содержится в:
Jeff Squyres 2004-10-28 22:24:45 +00:00
родитель 7b6a879b56
Коммит c678abf70a

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

@ -20,6 +20,11 @@
#include "ompi_config.h" #include "ompi_config.h"
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if defined(__GNUC__) || defined (WIN32) #if defined(__GNUC__) || defined (WIN32)
#define STATIC_INLINE static inline #define STATIC_INLINE static inline
#else #else
@ -222,7 +227,9 @@ static inline int ompi_atomic_cmpset_xx( volatile void* addr, int64_t oldval,
(int64_t)oldval, (int64_t)newval ); (int64_t)oldval, (int64_t)newval );
#endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */ #endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */
default: default:
*(int*)(NULL) = 0; /* This should never happen, so deliberately cause a seg fault
for corefile analysis */
*(int*)(0) = 0;
} }
return 0; /* always fail */ return 0; /* always fail */
} }
@ -257,7 +264,9 @@ static inline int ompi_atomic_cmpset_acq_xx( volatile void* addr, int64_t oldval
(int64_t)oldval, (int64_t)newval ); (int64_t)oldval, (int64_t)newval );
#endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */ #endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */
default: default:
*(int*)(NULL) = 0; /* This should never happen, so deliberately cause a seg fault
for corefile analysis */
*(int*)(0) = 0;
} }
return 0; /* always fail */ return 0; /* always fail */
} }
@ -292,7 +301,9 @@ static inline int ompi_atomic_cmpset_rel_xx( volatile void* addr, int64_t oldval
(int64_t)oldval, (int64_t)newval ); (int64_t)oldval, (int64_t)newval );
#endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */ #endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */
default: default:
*(int*)(NULL) = 0; /* This should never happen, so deliberately cause a seg fault
for corefile analysis */
*(int*)(0) = 0;
} }
return 0; /* always fail */ return 0; /* always fail */
} }
@ -326,7 +337,9 @@ static inline void ompi_atomic_add_xx( volatile void* addr, int32_t value, size_
break; break;
#endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */ #endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */
default: default:
*(int*)(NULL) = 0; /* This should never happen, so deliberately cause a seg fault
for corefile analysis */
*(int*)(0) = 0;
} }
} }
@ -356,7 +369,9 @@ static inline void ompi_atomic_sub_xx( volatile void* addr, int32_t value, size_
break; break;
#endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */ #endif /* OMPI_ARCHITECTURE_DEFINE_ATOMIC_CMPSET_64 */
default: default:
*(int*)(NULL) = 0; /* This should never happen, so deliberately cause a seg fault
for corefile analysis */
*(int*)(0) = 0;
} }
} }
@ -388,15 +403,14 @@ enum {
static inline int ompi_atomic_trylock(ompi_lock_t *lock) static inline int ompi_atomic_trylock(ompi_lock_t *lock)
{ {
ompi_atomic_cmpset_acq((volatile int*) lock, return ompi_atomic_cmpset_acq(&lock->u.lock,
OMPI_ATOMIC_UNLOCKED, OMPI_ATOMIC_UNLOCKED,
OMPI_ATOMIC_LOCKED); OMPI_ATOMIC_LOCKED);
return lock->u.lock;
} }
static inline void ompi_atomic_lock(ompi_lock_t *lock) static inline void ompi_atomic_lock(ompi_lock_t *lock)
{ {
while( !ompi_atomic_cmpset_acq((volatile int *) lock, while( !ompi_atomic_cmpset_acq(&lock->u.lock,
OMPI_ATOMIC_UNLOCKED, OMPI_ATOMIC_UNLOCKED,
OMPI_ATOMIC_LOCKED) ) { OMPI_ATOMIC_LOCKED) ) {
while (lock->u.lock == OMPI_ATOMIC_LOCKED) { while (lock->u.lock == OMPI_ATOMIC_LOCKED) {
@ -407,7 +421,7 @@ static inline void ompi_atomic_lock(ompi_lock_t *lock)
static inline void ompi_atomic_unlock(ompi_lock_t *lock) static inline void ompi_atomic_unlock(ompi_lock_t *lock)
{ {
ompi_atomic_cmpset_rel((volatile int *) lock, ompi_atomic_cmpset_rel(&lock->u.lock,
OMPI_ATOMIC_LOCKED, OMPI_ATOMIC_LOCKED,
OMPI_ATOMIC_UNLOCKED); OMPI_ATOMIC_UNLOCKED);
} }