summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/scripttools/debugging/qscriptdebuggerbackend.cpp1
-rw-r--r--src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp3
-rw-r--r--tests/auto/qscriptenginedebugger/tst_qscriptenginedebugger.cpp18
3 files changed, 21 insertions, 1 deletions
diff --git a/src/scripttools/debugging/qscriptdebuggerbackend.cpp b/src/scripttools/debugging/qscriptdebuggerbackend.cpp
index adc1410..63dcf75 100644
--- a/src/scripttools/debugging/qscriptdebuggerbackend.cpp
+++ b/src/scripttools/debugging/qscriptdebuggerbackend.cpp
@@ -154,6 +154,7 @@ void QScriptDebuggerBackendPrivate::postEvent(QEvent *e)
{
if (!eventReceiver) {
eventReceiver = new QScriptDebuggerBackendEventReceiver(this);
+ Q_ASSERT(agent != 0);
eventReceiver->moveToThread(agent->engine()->thread());
}
QCoreApplication::postEvent(eventReceiver, e);
diff --git a/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp b/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp
index 8b08e4c..d1b881c 100644
--- a/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp
+++ b/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp
@@ -201,7 +201,8 @@ QScriptEngineDebuggerBackend::~QScriptEngineDebuggerBackend()
void QScriptEngineDebuggerBackend::processCommand(int id, const QScriptDebuggerCommand &command)
{
Q_D(QScriptEngineDebuggerBackend);
- d->postEvent(new QScriptDebuggerCommandEvent(id, command));
+ if (d->agent)
+ d->postEvent(new QScriptDebuggerCommandEvent(id, command));
}
/*!
diff --git a/tests/auto/qscriptenginedebugger/tst_qscriptenginedebugger.cpp b/tests/auto/qscriptenginedebugger/tst_qscriptenginedebugger.cpp
index 52d1503..0690874 100644
--- a/tests/auto/qscriptenginedebugger/tst_qscriptenginedebugger.cpp
+++ b/tests/auto/qscriptenginedebugger/tst_qscriptenginedebugger.cpp
@@ -82,6 +82,7 @@ private slots:
void multithreadedDebugging();
void autoShowStandardWindow();
void standardWindowOwnership();
+ void engineDeleted();
};
tst_QScriptEngineDebugger::tst_QScriptEngineDebugger()
@@ -832,5 +833,22 @@ void tst_QScriptEngineDebugger::standardWindowOwnership()
QVERIFY(win != 0);
}
+void tst_QScriptEngineDebugger::engineDeleted()
+{
+ QScriptEngine* engine = new QScriptEngine;
+ QScriptEngineDebugger *debugger = new QScriptEngineDebugger;
+ debugger->attachTo(engine);
+
+ debugger->standardWindow()->show();
+ QTest::qWaitForWindowShown(debugger->standardWindow());
+
+ QSignalSpy destroyedSpy(engine, SIGNAL(destroyed()));
+ engine->deleteLater();
+ QTRY_COMPARE(destroyedSpy.count(), 1);
+
+ // Shouldn't crash (QTBUG-21548)
+ debugger->action(QScriptEngineDebugger::ContinueAction)->trigger();
+}
+
QTEST_MAIN(tst_QScriptEngineDebugger)
#include "tst_qscriptenginedebugger.moc"