aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2011-07-26 11:32:09 +1000
committerQt by Nokia <qt-info@nokia.com>2011-07-26 06:29:54 +0200
commitd0b8a04c8d6801b84b7bd6fd62e921fbb45f0fe2 (patch)
tree7a1c9db5ca41518b8219673fb0589e479c6f734a
parentf5eb5ad7a0b5bbfc40070a65d7dfc84c53ef9414 (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>
-rw-r--r--src/declarative/qml/qdeclarativetypeloader.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml3
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp16
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"