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>bb10
parent
0b62cd8da7
commit
473ad206c4
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue