diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-06-13 01:01:09 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-06-13 10:50:36 +0200 |
commit | 238f619ed35b63413de17991c84ff14e018b859d (patch) | |
tree | 1236acb09e4b729b0263416375aab02e948a7eef /tests/auto/qml/qjsvalue/tst_qjsvalue.cpp | |
parent | ac402fa6d99eeb519a9cc23b028358dfb6df4d82 (diff) | |
parent | edb4d0e17fc1c5f94e630f73234f76fa1dbdabf7 (diff) |
Merge remote-tracking branch 'origin/5.12' into 5.13
Conflicts:
src/qml/jsruntime/qv4memberdata.cpp
Change-Id: I4e9ffc89d65279a42516f5547e93fb47fb571834
Diffstat (limited to 'tests/auto/qml/qjsvalue/tst_qjsvalue.cpp')
-rw-r--r-- | tests/auto/qml/qjsvalue/tst_qjsvalue.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp b/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp index b58cd98d1e..a34a9e5188 100644 --- a/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp +++ b/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp @@ -27,7 +27,14 @@ ****************************************************************************/ #include "tst_qjsvalue.h" + +#include <private/qv4engine_p.h> +#include <private/qjsvalue_p.h> + #include <QtWidgets/QPushButton> +#include <QtCore/qthread.h> + +#include <memory> tst_QJSValue::tst_QJSValue() : engine(nullptr) @@ -2610,4 +2617,34 @@ void tst_QJSValue::nestedObjectToVariant() QCOMPARE(o.toVariant(), expected); } +void tst_QJSValue::deleteFromDifferentThread() +{ +#if !QT_CONFIG(thread) + QSKIP("Need thread support to destroy QJSValues from different threads"); +#else + QV4::PersistentValueStorage storage(engine->handle()); + QCOMPARE(storage.firstPage, nullptr); + QJSValue jsval; + QJSValuePrivate::setRawValue(&jsval, storage.allocate()); + QVERIFY(storage.firstPage != nullptr); + + QMutex mutex; + QWaitCondition condition; + + std::unique_ptr<QThread> thread(QThread::create([&]() { + QMutexLocker locker(&mutex); + QJSValuePrivate::free(&jsval); + QJSValuePrivate::setRawValue(&jsval, nullptr); + QVERIFY(storage.firstPage != nullptr); + condition.wakeOne(); + })); + + QMutexLocker locker(&mutex); + thread->start(); + condition.wait(&mutex); + QTRY_VERIFY(thread->isFinished()); + QTRY_COMPARE(storage.firstPage, nullptr); +#endif +} + QTEST_MAIN(tst_QJSValue) |