diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2018-02-07 17:22:41 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2018-02-08 08:39:01 +0000 |
commit | cefd0913c302c0821a0d40e95f5f85113e9f17db (patch) | |
tree | 5c1414047fa747c27ea4540d157868657e18eee3 /src/qmldebug | |
parent | f6e8dfb82328c21228837e18a0ec8f6287a1b485 (diff) |
QmlDebug: Don't lie about blocked engines in EngineControl
Previously additional engineIds could be accidentally added to the list
by processing the engineAdded and engineRemoved signals.
Change-Id: Ibac0c1ff48ae31c736371d319fe91d33a3396b05
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qmldebug')
-rw-r--r-- | src/qmldebug/qqmlenginecontrolclient.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/qmldebug/qqmlenginecontrolclient.cpp b/src/qmldebug/qqmlenginecontrolclient.cpp index 3f75298e51..13f216ce38 100644 --- a/src/qmldebug/qqmlenginecontrolclient.cpp +++ b/src/qmldebug/qqmlenginecontrolclient.cpp @@ -108,32 +108,37 @@ void QQmlEngineControlClient::messageReceived(const QByteArray &data) if (!stream.atEnd()) stream >> name; - QQmlEngineControlClientPrivate::EngineState &state = d->blockedEngines[id]; - Q_ASSERT(state.blockers == 0); - Q_ASSERT(state.releaseCommand == QQmlEngineControlClientPrivate::InvalidCommand); + auto handleWaiting = [&]( + QQmlEngineControlClientPrivate::CommandType command, std::function<void()> emitter) { + QQmlEngineControlClientPrivate::EngineState &state = d->blockedEngines[id]; + Q_ASSERT(state.blockers == 0); + Q_ASSERT(state.releaseCommand == QQmlEngineControlClientPrivate::InvalidCommand); + state.releaseCommand = command; + emitter(); + if (state.blockers == 0) { + d->sendCommand(state.releaseCommand, id); + d->blockedEngines.remove(id); + } + }; switch (message) { case QQmlEngineControlClientPrivate::EngineAboutToBeAdded: - state.releaseCommand = QQmlEngineControlClientPrivate::StartWaitingEngine; - emit engineAboutToBeAdded(id, name); + handleWaiting(QQmlEngineControlClientPrivate::StartWaitingEngine, [&](){ + emit engineAboutToBeAdded(id, name); + }); break; case QQmlEngineControlClientPrivate::EngineAdded: emit engineAdded(id, name); break; case QQmlEngineControlClientPrivate::EngineAboutToBeRemoved: - state.releaseCommand = QQmlEngineControlClientPrivate::StopWaitingEngine; - emit engineAboutToBeRemoved(id, name); + handleWaiting(QQmlEngineControlClientPrivate::StopWaitingEngine, [&](){ + emit engineAboutToBeRemoved(id, name); + }); break; case QQmlEngineControlClientPrivate::EngineRemoved: emit engineRemoved(id, name); break; } - - if (state.blockers == 0 && - state.releaseCommand != QQmlEngineControlClientPrivate::InvalidCommand) { - d->sendCommand(state.releaseCommand, id); - d->blockedEngines.remove(id); - } } QQmlEngineControlClientPrivate::QQmlEngineControlClientPrivate(QQmlDebugConnection *connection) : |