aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2018-02-08 15:18:02 +0100
committerUlf Hermann <ulf.hermann@qt.io>2018-02-08 14:55:01 +0000
commit43a8bd046e1456cfc124e00d75ab6c47fdc0617e (patch)
tree9878a56735adeb75e5d8c98478fc74e20df1a3f0
parent06294002887bffce69ecb59efb3f051542283d54 (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.cpp33
-rw-r--r--src/libs/qmldebug/qmlenginecontrolclient.h2
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: