diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2015-01-07 16:00:08 -0800 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2015-01-21 08:23:59 +0100 |
commit | 473ad206c40ac99d00732f5862a51affcd746d2d (patch) | |
tree | d5785516c5a6df350676a80de8a43d5ae30d055f | |
parent | 0b62cd8da7d8ee078b799b95088a63626099caa4 (diff) |
Fix QSharedPointer::create and QEnableSharedFromThis
We forgot to initialize the tracker if create() was used.
Task-number: QTBUG-43696
Change-Id: Ic5d393bfd36e48a193fcffff13b740931ff2204b
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
-rw-r--r-- | src/corelib/tools/qsharedpointer_impl.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp | 18 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 061c7a5a2d..a18b2c28a1 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -412,6 +412,7 @@ public: # ifdef QT_SHAREDPOINTER_TRACK_POINTERS internalSafetyCheckAdd(result.d, result.value); # endif + result.enableSharedFromThis(result.data()); return result; } #else @@ -432,6 +433,7 @@ public: internalSafetyCheckAdd(result.d, result.value); # endif result.d->setQObjectShared(result.value, true); + result.enableSharedFromThis(result.data()); return result; } diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp index d5a628889c..346ce6fcf9 100644 --- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp +++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp @@ -2355,6 +2355,24 @@ void tst_QSharedPointer::sharedFromThis() QCOMPARE(Data::generationCounter, generations + 4); QCOMPARE(Data::destructorCounter, destructions + 4); + { + QSharedPointer<SomeClass> scp2 = QSharedPointer<SomeClass>::create(); + QVERIFY(!scp2.isNull()); + + scp = scp2->sharedFromThis(); + QVERIFY(!scp.isNull()); + + QVERIFY(scp == scp2); + QCOMPARE(Data::generationCounter, generations + 5); + QCOMPARE(Data::destructorCounter, destructions + 4); + } + QCOMPARE(Data::generationCounter, generations + 5); + QCOMPARE(Data::destructorCounter, destructions + 4); + + scp.clear(); + + QCOMPARE(Data::generationCounter, generations + 5); + QCOMPARE(Data::destructorCounter, destructions + 5); } namespace ReentrancyWhileDestructing { |