diff options
Diffstat (limited to 'src/corelib/arch/qatomic_armv5.h')
-rw-r--r-- | src/corelib/arch/qatomic_armv5.h | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h index b583ec662c..6939650c54 100644 --- a/src/corelib/arch/qatomic_armv5.h +++ b/src/corelib/arch/qatomic_armv5.h @@ -72,9 +72,6 @@ QT_END_NAMESPACE # error "Qt is misconfigured: this ARMv5 implementation is only possible on Linux" #endif -template<> struct QAtomicIntegerTraits<int> { enum { IsInteger = 1 }; }; -template<> struct QAtomicIntegerTraits<unsigned int> { enum { IsInteger = 1 }; }; - template <int size> struct QBasicAtomicOps: QGenericAtomicOps<QBasicAtomicOps<size> > { // kernel places a restartable cmpxchg implementation at a fixed address @@ -136,13 +133,16 @@ bool QBasicAtomicOps<4>::deref(T &_q_value) Q_DECL_NOTHROW } template<> template <typename T> inline -bool QBasicAtomicOps<4>::testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW +bool QBasicAtomicOps<4>::testAndSetRelaxed(T &_q_value, T expectedValue, T newValue, T *currentValue) Q_DECL_NOTHROW { T originalValue; do { originalValue = _q_value; - if (originalValue != expectedValue) + if (originalValue != expectedValue) { + if (currentValue) + *currentValue = originalValue; return false; + } } while (_q_cmpxchg(expectedValue, newValue, &_q_value) != 0); return true; } |