aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-10-15 16:29:03 +0200
committerhjk <hjk@theqtcompany.com>2015-10-15 17:11:50 +0000
commit5c64391fb4eb7c85634d08327e2cf82182260ac9 (patch)
tree4122ae3edfc70897955fbddfe8910999023113f2 /src/plugins
parent6fc1e0fc36f0732e79375a0e105816eb17893962 (diff)
Only set V4 debugger when service is enabled
Otherwise different debug services could steal each other's debugers. Change-Id: Ic0a50333d21c7d20a7124240ea598f8446400ae3 Reviewed-by: hjk <hjk@theqtcompany.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp38
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h2
2 files changed, 31 insertions, 9 deletions
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp
index 306c3c4d1a..5233a09992 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp
@@ -34,6 +34,7 @@
#include "qv4debugservice.h"
#include "qqmlengine.h"
#include <private/qv4engine_p.h>
+#include <private/qv4isel_moth_p.h>
#include <private/qv4function_p.h>
#include <private/qqmldebugconnector_p.h>
@@ -621,8 +622,10 @@ void QV4DebugServiceImpl::engineAboutToBeAdded(QQmlEngine *engine)
QV4::ExecutionEngine *ee = QV8Engine::getV4(engine->handle());
if (QQmlDebugConnector *server = QQmlDebugConnector::instance()) {
if (ee) {
+ ee->iselFactory.reset(new QV4::Moth::ISelFactory);
QV4::Debugging::V4Debugger *debugger = new QV4::Debugging::V4Debugger(ee);
- ee->setDebugger(debugger);
+ if (state() == Enabled)
+ ee->setDebugger(debugger);
debuggerMap.insert(debuggerIndex++, debugger);
debuggerAgent.addDebugger(debugger);
debuggerAgent.moveToThread(server->thread());
@@ -639,21 +642,38 @@ void QV4DebugServiceImpl::engineAboutToBeRemoved(QQmlEngine *engine)
const QV4::ExecutionEngine *ee = QV8Engine::getV4(engine->handle());
if (ee) {
QV4::Debugging::V4Debugger *debugger
- = static_cast<QV4::Debugging::V4Debugger *>(ee->debugger);
- typedef QMap<int, QV4::Debugging::V4Debugger *>::const_iterator DebuggerMapIterator;
- const DebuggerMapIterator end = debuggerMap.constEnd();
- for (DebuggerMapIterator i = debuggerMap.constBegin(); i != end; ++i) {
- if (i.value() == debugger) {
- debuggerMap.remove(i.key());
- break;
+ = qobject_cast<QV4::Debugging::V4Debugger *>(ee->debugger);
+ if (debugger) {
+ typedef QMap<int, QV4::Debugging::V4Debugger *>::const_iterator DebuggerMapIterator;
+ const DebuggerMapIterator end = debuggerMap.constEnd();
+ for (DebuggerMapIterator i = debuggerMap.constBegin(); i != end; ++i) {
+ if (i.value() == debugger) {
+ debuggerMap.remove(i.key());
+ break;
+ }
}
+ debuggerAgent.removeDebugger(debugger);
}
- debuggerAgent.removeDebugger(debugger);
}
}
QQmlConfigurableDebugService<QV4DebugService>::engineAboutToBeRemoved(engine);
}
+void QV4DebugServiceImpl::stateAboutToBeChanged(State state)
+{
+ QMutexLocker lock(&m_configMutex);
+ if (state == Enabled) {
+ typedef QMap<int, QV4::Debugging::V4Debugger *>::const_iterator DebuggerMapIterator;
+ const DebuggerMapIterator end = debuggerMap.constEnd();
+ for (DebuggerMapIterator i = debuggerMap.constBegin(); i != end; ++i) {
+ QV4::ExecutionEngine *ee = i.value()->engine();
+ if (!ee->debugger)
+ ee->setDebugger(i.value());
+ }
+ }
+ QQmlConfigurableDebugService<QV4DebugService>::stateAboutToBeChanged(state);
+}
+
void QV4DebugServiceImpl::signalEmitted(const QString &signal)
{
//This function is only called by QQmlBoundSignal
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h
index c4920404a2..273e5ffd62 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h
@@ -73,6 +73,8 @@ public:
void engineAboutToBeAdded(QQmlEngine *engine);
void engineAboutToBeRemoved(QQmlEngine *engine);
+ void stateAboutToBeChanged(State state);
+
void signalEmitted(const QString &signal);
void send(QJsonObject v8Payload);