diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2018-02-08 15:18:02 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2018-02-08 14:55:01 +0000 |
commit | 43a8bd046e1456cfc124e00d75ab6c47fdc0617e (patch) | |
tree | 9878a56735adeb75e5d8c98478fc74e20df1a3f0 | |
parent | 06294002887bffce69ecb59efb3f051542283d54 (diff) |
QmlDebug: Allow retrieval of blocked engines from EngineControl
Also, don't accidentally add engines to the list on engineAdded() and
engineRemoved().
Change-Id: Ida4362eb003b85282dad17afbf0116c82f024288
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | src/libs/qmldebug/qmlenginecontrolclient.cpp | 33 | ||||
-rw-r--r-- | src/libs/qmldebug/qmlenginecontrolclient.h | 2 |
2 files changed, 24 insertions, 11 deletions
diff --git a/src/libs/qmldebug/qmlenginecontrolclient.cpp b/src/libs/qmldebug/qmlenginecontrolclient.cpp index dba74b30cbb..82417ef05aa 100644 --- a/src/libs/qmldebug/qmlenginecontrolclient.cpp +++ b/src/libs/qmldebug/qmlenginecontrolclient.cpp @@ -65,6 +65,11 @@ void QmlEngineControlClient::releaseEngine(int engineId) } } +QList<int> QmlEngineControlClient::blockedEngines() const +{ + return m_blockedEngines.keys(); +} + void QmlEngineControlClient::messageReceived(const QByteArray &data) { QPacket stream(dataStreamVersion(), data); @@ -77,30 +82,36 @@ void QmlEngineControlClient::messageReceived(const QByteArray &data) if (!stream.atEnd()) stream >> name; - EngineState &state = m_blockedEngines[id]; - QTC_ASSERT(state.blockers == 0 && state.releaseCommand == InvalidCommand, /**/); + auto handleWaiting = [&](CommandType command, std::function<void()> emitter) { + EngineState &state = m_blockedEngines[id]; + QTC_CHECK(state.blockers == 0); + QTC_CHECK(state.releaseCommand == InvalidCommand); + state.releaseCommand = command; + emitter(); + if (state.blockers == 0) { + sendCommand(state.releaseCommand, id); + m_blockedEngines.remove(id); + } + }; switch (message) { case EngineAboutToBeAdded: - state.releaseCommand = StartWaitingEngine; - emit engineAboutToBeAdded(id, name); + handleWaiting(StartWaitingEngine, [&](){ + emit engineAboutToBeAdded(id, name); + }); break; case EngineAdded: emit engineAdded(id, name); break; case EngineAboutToBeRemoved: - state.releaseCommand = StopWaitingEngine; - emit engineAboutToBeRemoved(id, name); + handleWaiting(StopWaitingEngine, [&](){ + emit engineAboutToBeRemoved(id, name); + }); break; case EngineRemoved: emit engineRemoved(id, name); break; } - - if (state.blockers == 0 && state.releaseCommand != InvalidCommand) { - sendCommand(state.releaseCommand, id); - m_blockedEngines.remove(id); - } } void QmlEngineControlClient::sendCommand(QmlEngineControlClient::CommandType command, int engineId) diff --git a/src/libs/qmldebug/qmlenginecontrolclient.h b/src/libs/qmldebug/qmlenginecontrolclient.h index c947fd72f01..284ee057cb7 100644 --- a/src/libs/qmldebug/qmlenginecontrolclient.h +++ b/src/libs/qmldebug/qmlenginecontrolclient.h @@ -52,6 +52,8 @@ public: void blockEngine(int engineId); void releaseEngine(int engineId); + QList<int> blockedEngines() const; + void messageReceived(const QByteArray &) override; signals: |