Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | void QtSharedPointer::ExternalRefCountData::setQObjectShared(const QObject *, bool) | - |
14 | {} | - |
15 | void QtSharedPointer::ExternalRefCountData::checkQObjectShared(const QObject *) | - |
16 | { | - |
17 | if (strongref.load() < 0) | - |
18 | QMessageLogger(__FILE__, 13211328, __PRETTY_FUNCTION__).warning("QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer"); | - |
19 | } | - |
20 | | - |
21 | QtSharedPointer::ExternalRefCountData *QtSharedPointer::ExternalRefCountData::getAndRef(const QObject *obj) | - |
22 | { | - |
23 | ((!(obj)) ? qt_assert("obj",__FILE__,13261333) : qt_noop()); | - |
24 | QObjectPrivate *d = QObjectPrivate::get(const_cast<QObject *>(obj)); | - |
25 | ((!(!d->wasDeleted)) ? qt_assert_x("QWeakPointer", "Detected QWeakPointer creation in a QObject being deleted",__FILE__,13281335) : qt_noop()); | - |
26 | | - |
27 | ExternalRefCountData *that = d->sharedRefcount.load(); | - |
28 | if (that) { | - |
29 | that->weakref.ref(); | - |
30 | return that; | - |
31 | } | - |
32 | | - |
33 | | - |
34 | ExternalRefCountData *x = new ExternalRefCountData(Qt::Uninitialized); | - |
35 | x->strongref.store(-1); | - |
36 | x->weakref.store(2); | - |
37 | if (!d->sharedRefcount.testAndSetRelease(0, x)) { | - |
38 | delete x; | - |
39 | x = d->sharedRefcount.loadAcquire(); | - |
40 | x->weakref.ref(); | - |
41 | } | - |
42 | return x; | - |
43 | } | - |
44 | | - |
45 | | - |
46 | | - |
47 | | - |
48 | | - |
49 | | - |
50 | QSharedPointer<QObject> QtSharedPointer::sharedPointerFromVariant_internal(const QVariant &variant) | - |
51 | { | - |
52 | ((!(QMetaType::typeFlags(variant.userType()) & QMetaType::SharedPointerToQObject)) ? qt_assert("QMetaType::typeFlags(variant.userType()) & QMetaType::SharedPointerToQObject",__FILE__,13551362) : qt_noop()); | - |
53 | return *reinterpret_cast<const QSharedPointer<QObject>*>(variant.constData()); | - |
54 | } | - |
55 | | - |
56 | | - |
57 | | - |
58 | | - |
59 | | - |
60 | | - |
61 | QWeakPointer<QObject> QtSharedPointer::weakPointerFromVariant_internal(const QVariant &variant) | - |
62 | { | - |
63 | ((!(QMetaType::typeFlags(variant.userType()) & QMetaType::WeakPointerToQObject || QMetaType::typeFlags(variant.userType()) & QMetaType::TrackingPointerToQObject)) ? qt_assert("QMetaType::typeFlags(variant.userType()) & QMetaType::WeakPointerToQObject || QMetaType::typeFlags(variant.userType()) & QMetaType::TrackingPointerToQObject",__FILE__,13661373) : qt_noop()); | - |
64 | return *reinterpret_cast<const QWeakPointer<QObject>*>(variant.constData()); | - |
65 | } | - |
66 | | - |
67 | | - |
68 | namespace { | - |
69 | | - |
70 | struct Data { | - |
71 | const volatile void *pointer; | - |
72 | | - |
73 | | - |
74 | | - |
75 | }; | - |
76 | | - |
77 | class KnownPointers | - |
78 | { | - |
79 | public: | - |
80 | QMutex mutex; | - |
81 | QHash<const void *, Data> dPointers; | - |
82 | QHash<const volatile void *, const void *> dataPointers; | - |
83 | }; | - |
84 | } | - |
85 | | - |
86 | namespace { namespace Q_QGS_knownPointers { typedef KnownPointers Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized) guard.store(QtGlobalStatic::Destroyed); } }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ())) : value () { guard.store(QtGlobalStatic::Initialized); } } holder; return &holder.value; } } } static QGlobalStatic<KnownPointers, Q_QGS_knownPointers::innerFunction, Q_QGS_knownPointers::guard> knownPointers; | - |
87 | | - |
88 | | - |
89 | | - |
90 | namespace QtSharedPointer { | - |
91 | __attribute__((visibility("default"))) void internalSafetyCheckCleanCheck(); | - |
92 | } | - |
93 | | - |
94 | | - |
95 | | - |
96 | | - |
97 | void QtSharedPointer::internalSafetyCheckAdd(const void *d_ptr, const volatile void *ptr) | - |
98 | { | - |
99 | KnownPointers *const kp = knownPointers(); | - |
100 | if (!kpTRUE | never evaluated | FALSE | evaluated 133 times by 1 test |
) | 0-133 |
101 | return; never executed: return; | 0 |
102 | | - |
103 | QMutexLocker lock(&kp->mutex); | - |
104 | ((!(!kp->dPointers.contains(d_ptr))) ? qt_assert("!kp->dPointers.contains(d_ptr)",__FILE__,14951502) : qt_noop()); | - |
105 | | - |
106 | | - |
107 | | - |
108 | const void *other_d_ptr = kp->dataPointers.value(ptr, 0); | - |
109 | if (__builtin_expect(!!(TRUE | never evaluated | FALSE | evaluated 133 times by 1 test |
other_d_ptr)), false)TRUE | never evaluated | FALSE | evaluated 133 times by 1 test |
) { | 0-133 |
110 | | - |
111 | | - |
112 | | - |
113 | QMessageLogger(__FILE__, 15041511, __PRETTY_FUNCTION__).fatal("QSharedPointer: internal self-check failed: pointer %p was already tracked " | - |
114 | "by another QSharedPointer object %p", ptr, other_d_ptr); | - |
115 | } never executed: end of block | 0 |
116 | | - |
117 | Data data; | - |
118 | data.pointer = ptr; | - |
119 | | - |
120 | | - |
121 | | - |
122 | | - |
123 | kp->dPointers.insert(d_ptr, data); | - |
124 | kp->dataPointers.insert(ptr, d_ptr); | - |
125 | ((!(kp->dPointers.size() == kp->dataPointers.size())) ? qt_assert("kp->dPointers.size() == kp->dataPointers.size()",__FILE__,15161523) : qt_noop()); | - |
126 | }executed 133 times by 1 test: end of block | 133 |
127 | | - |
128 | | - |
129 | | - |
130 | | - |
131 | void QtSharedPointer::internalSafetyCheckRemove(const void *d_ptr) | - |
132 | { | - |
133 | KnownPointers *const kp = knownPointers(); | - |
134 | if (!kpTRUE | never evaluated | FALSE | evaluated 133 times by 1 test |
) | 0-133 |
135 | return; never executed: return; | 0 |
136 | | - |
137 | QMutexLocker lock(&kp->mutex); | - |
138 | | - |
139 | QHash<const void *, Data>::iteratorauto it = kp->dPointers.findconstFind(d_ptr); | - |
140 | if (__builtin_expect(!!(TRUE | never evaluated | FALSE | evaluated 133 times by 1 test |
it == kp->dPointers.end())cend()), false)TRUE | never evaluated | FALSE | evaluated 133 times by 1 test |
) { | 0-133 |
141 | QMessageLogger(__FILE__, 15321539, __PRETTY_FUNCTION__).fatal("QSharedPointer: internal self-check inconsistency: pointer %p was not tracked. " | - |
142 | "To use QT_SHAREDPOINTER_TRACK_POINTERS, you have to enable it throughout " | - |
143 | "in your code.", d_ptr); | - |
144 | } never executed: end of block | 0 |
145 | | - |
146 | QHash<const volatile void *,const void *>::iteratorauto it2 = kp->dataPointers.findconstFind(it->pointer); | - |
147 | ((!(it2 != kp->dataPointers.endcend())) ? qt_assert("it2 != kp->dataPointers.endcend()",__FILE__,15381545) : qt_noop()); | - |
148 | | - |
149 | | - |
150 | | - |
151 | | - |
152 | kp->dataPointers.erase(it2); | - |
153 | kp->dPointers.erase(it); | - |
154 | ((!(kp->dPointers.size() == kp->dataPointers.size())) ? qt_assert("kp->dPointers.size() == kp->dataPointers.size()",__FILE__,15451552) : qt_noop()); | - |
155 | }executed 133 times by 1 test: end of block | 133 |
156 | | - |
157 | | - |
158 | | - |
159 | | - |
160 | | - |
161 | void QtSharedPointer::internalSafetyCheckCleanCheck() | - |
162 | { | - |
163 | | - |
164 | KnownPointers *const kp = knownPointers(); | - |
165 | ((!(kp)) ? qt_assert_x("internalSafetyCheckSelfCheck()", "Called after global statics deletion!",__FILE__,15561563) : qt_noop()); | - |
166 | | - |
167 | if (__builtin_expect(!!(TRUE | never evaluated | FALSE | evaluated 121 times by 2 testsEvaluated by:- tst_QSharedPointer
- tst_QSharedPointer_and_QWidget
|
kp->dPointers.size() != kp->dataPointers.size())()), false)TRUE | never evaluated | FALSE | evaluated 121 times by 2 testsEvaluated by:- tst_QSharedPointer
- tst_QSharedPointer_and_QWidget
|
) | 0-121 |
168 | QMessageLogger(__FILE__, 15591566, __PRETTY_FUNCTION__).fatal("Internal consistency error: the number of pointers is not equal!"); never executed: QMessageLogger(__FILE__, 1566, __PRETTY_FUNCTION__).fatal("Internal consistency error: the number of pointers is not equal!"); | 0 |
169 | | - |
170 | if (!(__builtin_expect(!!(!TRUE | never evaluated | FALSE | evaluated 121 times by 2 testsEvaluated by:- tst_QSharedPointer
- tst_QSharedPointer_and_QWidget
|
kp->dPointers.isEmpty())()), false)TRUE | never evaluated | FALSE | evaluated 121 times by 2 testsEvaluated by:- tst_QSharedPointer
- tst_QSharedPointer_and_QWidget
|
) | 0-121 |
171 | QMessageLogger(__FILE__, 15621569, __PRETTY_FUNCTION__).fatal("Pointer cleaning failed: %d entries remaining", kp->dPointers.size()); never executed: QMessageLogger(__FILE__, 1569, __PRETTY_FUNCTION__).fatal("Pointer cleaning failed: %d entries remaining", kp->dPointers.size()); | 0 |
172 | | - |
173 | }executed 121 times by 2 tests: end of block Executed by:- tst_QSharedPointer
- tst_QSharedPointer_and_QWidget
| 121 |
174 | | - |
175 | | - |
| | |