[PATCH 2/3] Don't use the unsafe QAtomicPointer accessors in PHONON_GLOBAL_STATIC_WITH_ARGS.
Jon Severinsson
jon at severinsson.net
Sat Oct 6 19:12:07 BST 2012
These could lead to race conditions, and are removed from Qt5.
---
phonon/globalstatic_p.h | 8 +++-----
1 fil ändrad, 3 tillägg(+), 5 borttagningar(-)
diff --git a/phonon/globalstatic_p.h b/phonon/globalstatic_p.h
index cf80512..7555630 100644
--- a/phonon/globalstatic_p.h
+++ b/phonon/globalstatic_p.h
@@ -260,7 +260,7 @@ static struct PHONON_GLOBAL_STATIC_STRUCT_NAME(NAME)
} \
inline TYPE *operator->() \
{ \
- TYPE *p = _k_static_##NAME; \
+ TYPE *p = _k_static_##NAME.fetchAndAddAcquire(0); \
if (!p) { \
if (isDestroyed()) { \
qFatal("Fatal Error: Accessed global static '%s *%s()' after destruction. " \
@@ -269,7 +269,7 @@ static struct PHONON_GLOBAL_STATIC_STRUCT_NAME(NAME)
p = new TYPE ARGS; \
if (!_k_static_##NAME.testAndSetOrdered(0, p)) { \
delete p; \
- p = _k_static_##NAME; \
+ p = _k_static_##NAME.fetchAndAddAcquire(0); \
} else { \
static Phonon::CleanUpGlobalStatic cleanUpObject = { destroy }; \
} \
@@ -283,9 +283,7 @@ static struct PHONON_GLOBAL_STATIC_STRUCT_NAME(NAME)
static void destroy() \
{ \
_k_static_##NAME##_destroyed = true; \
- TYPE *x = _k_static_##NAME; \
- _k_static_##NAME = 0; \
- delete x; \
+ delete _k_static_##NAME.fetchAndStoreRelease(0); \
} \
} NAME;
--
1.7.10.4
_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel at kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel
_______________________________________________
kde-multimedia mailing list
kde-multimedia at kde.org
https://mail.kde.org/mailman/listinfo/kde-multimedia
More information about the kde-multimedia
mailing list