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 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 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 blockedEngines() const; + void messageReceived(const QByteArray &) override; signals: