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
Thiago Macieira 2015-01-07 16:00:08 -08:00
parent 0b62cd8da7
commit 473ad206c4
2 changed files with 20 additions and 0 deletions

View File

@ -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;
}

View File

@ -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 {