diff options
-rw-r--r-- | src/corelib/thread/qgenericatomic.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/src/corelib/thread/qgenericatomic.h b/src/corelib/thread/qgenericatomic.h index 0c66d45855..aeed199c97 100644 --- a/src/corelib/thread/qgenericatomic.h +++ b/src/corelib/thread/qgenericatomic.h @@ -264,12 +264,8 @@ template <typename BaseClass> struct QGenericAtomicOps template <typename T> static inline always_inline T fetchAndSubRelaxed(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT operand) Q_DECL_NOTHROW { - // implement fetchAndSub on top of testAndSet - Q_FOREVER { - T tmp = BaseClass::load(_q_value); - if (BaseClass::testAndSetRelaxed(_q_value, tmp, T(tmp - operand))) - return tmp; - } + // implement fetchAndSub on top of fetchAndAdd + return fetchAndAddRelaxed(_q_value, -operand); } template <typename T> static inline always_inline |