From 6a19eebfc28804360e5f79a63d7c5beb456d1a0e Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 9 Oct 2018 10:59:46 +0200 Subject: [PATCH] QML Debugger: Make sure to claim break points before CONNECT Otherwise we have a race condition. The breakpoints may be hit before they are set. Change-Id: Iccdd64758b150acdfadc18cba88abdf841feb6c7 Fixes: QTCREATORBUG-21253 Reviewed-by: hjk --- src/plugins/debugger/qml/qmlengine.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index a53e070dea2..bbd7684bf9a 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -349,8 +349,6 @@ void QmlEngine::connectionEstablished() connect(inspectorView(), &WatchTreeView::currentIndexChanged, this, &QmlEngine::updateCurrentContext); - BreakpointManager::claimBreakpointsForEngine(this); - if (state() == EngineRunRequested) notifyEngineRunAndInferiorRunOk(); } @@ -2433,13 +2431,18 @@ void QmlEnginePrivate::stateChanged(State state) engine->logServiceStateChange(name(), serviceVersion(), state); if (state == QmlDebugClient::Enabled) { - /// Start session. - flushSendBuffer(); - QJsonObject parameters; - parameters.insert("redundantRefs", false); - parameters.insert("namesAsObjects", false); - runDirectCommand(CONNECT, QJsonDocument(parameters).toJson()); - runCommand({VERSION}, CB(handleVersion)); + BreakpointManager::claimBreakpointsForEngine(engine); + + // Since the breakpoint claiming is deferred, we need to also defer the connecting + QTimer::singleShot(0, this, [this]() { + /// Start session. + flushSendBuffer(); + QJsonObject parameters; + parameters.insert("redundantRefs", false); + parameters.insert("namesAsObjects", false); + runDirectCommand(CONNECT, QJsonDocument(parameters).toJson()); + runCommand({VERSION}, CB(handleVersion)); + }); } }