diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-10-15 16:29:03 +0200 |
---|---|---|
committer | hjk <hjk@theqtcompany.com> | 2015-10-15 17:11:50 +0000 |
commit | 5c64391fb4eb7c85634d08327e2cf82182260ac9 (patch) | |
tree | 4122ae3edfc70897955fbddfe8910999023113f2 /src/plugins | |
parent | 6fc1e0fc36f0732e79375a0e105816eb17893962 (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.cpp | 38 | ||||
-rw-r--r-- | src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h | 2 |
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); |