diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-07-26 11:32:09 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-07-26 06:29:54 +0200 |
commit | d0b8a04c8d6801b84b7bd6fd62e921fbb45f0fe2 (patch) | |
tree | 7a1c9db5ca41518b8219673fb0589e479c6f734a | |
parent | f5eb5ad7a0b5bbfc40070a65d7dfc84c53ef9414 (diff) |
Reference resources to prevent crash (on some platforms)
Prevent the data blob from being deleted in done().
Task-number: QTBUG-18268
Change-Id: Ib265e6fc3e1539d0baf20e365c1f88f615b121dc
Reviewed-on: http://codereview.qt.nokia.com/2138
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
3 files changed, 21 insertions, 0 deletions
diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp index 47c90bd186..cb3e8aef3e 100644 --- a/src/declarative/qml/qdeclarativetypeloader.cpp +++ b/src/declarative/qml/qdeclarativetypeloader.cpp @@ -379,8 +379,10 @@ void QDeclarativeDataBlob::tryDone() m_status = Complete; m_isDone = true; + addref(); done(); notifyAllWaitingOnMe(); + release(); } } diff --git a/tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml b/tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml new file mode 100644 index 0000000000..d96a31f8f7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml @@ -0,0 +1,3 @@ +import QtQuick 1.0 +Text { +} diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index 328b7c8da1..dfaf3d1618 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -160,6 +160,7 @@ private slots: void revisionOverloads(); void propertyInit(); + void remoteLoadCrash(); // regression tests for crashes void crash1(); @@ -2069,6 +2070,21 @@ void tst_qdeclarativelanguage::registrationOrder() delete o; } +// QTBUG-18268 +void tst_qdeclarativelanguage::remoteLoadCrash() +{ + TestHTTPServer server(14448); + server.serveDirectory(SRCDIR); + + QDeclarativeComponent component(&engine); + component.setData("import QtQuick 1.0; Text {}", QUrl("http://127.0.0.1:14448/data/remoteLoadCrash.qml")); + while (component.isLoading()) + QCoreApplication::processEvents( QEventLoop::ExcludeUserInputEvents | QEventLoop::WaitForMoreEvents, 50); + + QObject *o = component.create(); + delete o; +} + QTEST_MAIN(tst_qdeclarativelanguage) #include "tst_qdeclarativelanguage.moc" |