QDeclarativeWorkerScriptEngine::~QDeclarativeWorkerScriptEngine()
{
d->m_lock.lock();
- qDeleteAll(d->workers);
- d->workers.clear();
QCoreApplication::postEvent(d, new QEvent((QEvent::Type)QDeclarativeWorkerScriptEnginePrivate::WorkerDestroyEvent));
d->m_lock.unlock();
{
d->m_lock.lock();
- v8::Isolate *isolate = v8::Isolate::New();
+ v8::Isolate *isolate = v8::Isolate::New();
isolate->Enter();
d->workerEngine = new QDeclarativeWorkerScriptEnginePrivate::WorkerEngine(d);
exec();
+ qDeleteAll(d->workers);
+ d->workers.clear();
+
delete d->workerEngine; d->workerEngine = 0;
isolate->Exit();
--- /dev/null
+WorkerScript.onMessage = function() {
+}
+for (var ii = 0; ii < 100; ++ii) {
+ var a = "HELLO WORLD";
+}
+
--- /dev/null
+import QtQuick 1.0
+
+Item {
+ WorkerScript {
+ id: worker
+ source: "stressDispose.js"
+ }
+
+ Component.onCompleted: {
+ worker.sendMessage(10);
+ }
+}
+
void script_included();
void scriptError_onLoad();
void scriptError_onCall();
+ void stressDispose();
private:
void waitForEchoMessage(QDeclarativeWorkerScript *worker) {
delete worker;
}
+// Rapidly create and destroy worker scripts to test resources are being disposed
+// in the correct isolate
+void tst_QDeclarativeWorkerScript::stressDispose()
+{
+ for (int ii = 0; ii < 100; ++ii) {
+ QDeclarativeEngine engine;
+ QDeclarativeComponent component(&engine, SRCDIR "/data/stressDispose.qml");
+ QObject *o = component.create();
+ QVERIFY(o);
+ delete o;
+ }
+}
QTEST_MAIN(tst_QDeclarativeWorkerScript)