diff options
author | Glenn Watson <glenn.watson@nokia.com> | 2011-11-22 08:02:17 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-22 03:31:14 +0100 |
commit | d2c1adc6f9afc4dd1bab3c487bbde70f3b8f2e81 (patch) | |
tree | 633ef62d68173c588de1ff81e6e6ee25117f0b7f /tests | |
parent | 0bf08af2b945f10f44561ffa0abd6f89b093b376 (diff) |
Emit destruction signal before child contexts are destroyed.
Verbatim comment from bug report:
When using a QtObject inside an item, and then we call a function
in the Component.onDestruction handler of that item, we get a
crash. This happens because the QDeclarativeContextData engine
has been invalidated before reaching
QDeclarativeExpressionPrivate::evalFunction.
Change code to emit the onDestruction signal before the child
contexts are invalidated.
Task-number: QTBUG-22535
Change-Id: Ic4983ae5fdf104ae977189c21dc202c9b02bc2bc
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Diffstat (limited to 'tests')
3 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml b/tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml new file mode 100644 index 0000000000..294c744317 --- /dev/null +++ b/tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 + +QtObject { + + function goodBye() + { + } +} diff --git a/tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml b/tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml new file mode 100644 index 0000000000..3553f6c03b --- /dev/null +++ b/tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml @@ -0,0 +1,10 @@ +import QtQuick 2.0 + +Rectangle { + width: 64 + height: 64 + + Object_22535 { id:o } + + Component.onDestruction: o.goodBye() +} diff --git a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp index 68599a2e83..ba9db4f875 100644 --- a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp +++ b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp @@ -80,6 +80,7 @@ private slots: void refreshExpressionsCrash(); void refreshExpressionsRootContext(); + void qtbug_22535(); private: QDeclarativeEngine engine; }; @@ -644,6 +645,18 @@ void tst_qdeclarativecontext::refreshExpressionsRootContext() delete o1; } +void tst_qdeclarativecontext::qtbug_22535() +{ + QDeclarativeEngine engine; + QDeclarativeComponent component(&engine, TEST_FILE("qtbug_22535.qml")); + QDeclarativeContext context(engine.rootContext()); + + QObject *o = component.create(&context); + + // Don't crash! + delete o; +} + QTEST_MAIN(tst_qdeclarativecontext) #include "tst_qdeclarativecontext.moc" |