From daac078756a6fd1493b88ffea2ba318cc8c2bdf5 Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Fri, 13 Jan 2012 15:50:35 +0100 Subject: [PATCH] QmlCppEngine: Properly handle requestRemoteSetupCalls Remember which engines called requestRemoteSetup. Change-Id: I75d11a21f0ebcbce1bba0aa4f653d1cc35b43483 Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com> Reviewed-by: hjk <qthjk@ovi.com> Reviewed-by: Christiaan Janssen <christiaan.janssen@nokia.com> --- src/plugins/debugger/qml/qmlcppengine.cpp | 27 ++++++++++++++++++----- src/plugins/debugger/qml/qmlcppengine.h | 3 +++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index f8913f40491..02687b21867 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -92,6 +92,7 @@ private: QmlEngine *m_qmlEngine; DebuggerEngine *m_cppEngine; DebuggerEngine *m_activeEngine; + QList<DebuggerEngine*> m_enginesAwaitingRemoteSetup; int m_stackBoundary; }; @@ -154,8 +155,9 @@ QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp, connect(d->m_qmlEngine->stackHandler(), SIGNAL(stackChanged()), d, SLOT(qmlStackChanged()), Qt::QueuedConnection); connect(d->m_cppEngine, SIGNAL(stackFrameCompleted()), this, SIGNAL(stackFrameCompleted())); - connect(d->m_cppEngine, SIGNAL(requestRemoteSetup()), this, SIGNAL(requestRemoteSetup())); connect(d->m_qmlEngine, SIGNAL(stackFrameCompleted()), this, SIGNAL(stackFrameCompleted())); + connect(d->m_cppEngine, SIGNAL(requestRemoteSetup()), this, SLOT(slaveEngineRequestedRemoteSetup())); + connect(d->m_qmlEngine, SIGNAL(requestRemoteSetup()), this, SLOT(slaveEngineRequestedRemoteSetup())); } QmlCppEngine::~QmlCppEngine() @@ -462,6 +464,19 @@ void QmlCppEngine::notifyInferiorShutdownOk() DebuggerEngine::notifyInferiorShutdownOk(); } +void QmlCppEngine::slaveEngineRequestedRemoteSetup() +{ + DebuggerEngine *slaveEngine = qobject_cast<DebuggerEngine*>(sender()); + QTC_ASSERT(slaveEngine, return); + + bool emitRequest = d->m_enginesAwaitingRemoteSetup.isEmpty(); + d->m_enginesAwaitingRemoteSetup << slaveEngine; + + if (emitRequest) { + emit requestRemoteSetup(); + } +} + void QmlCppEngine::setupInferior() { EDEBUG("\nMASTER SETUP INFERIOR"); @@ -659,15 +674,17 @@ void QmlCppEngine::slaveEngineStateChanged void QmlCppEngine::handleRemoteSetupDone(int gdbServerPort, int qmlPort) { EDEBUG("MASTER REMOTE SETUP DONE"); - d->m_qmlEngine->startParameters().qmlServerPort = qmlPort; - d->m_cppEngine->handleRemoteSetupDone(gdbServerPort, qmlPort); + foreach (DebuggerEngine *slaveEngine, d->m_enginesAwaitingRemoteSetup) + slaveEngine->handleRemoteSetupDone(gdbServerPort, qmlPort); + d->m_enginesAwaitingRemoteSetup.clear(); } void QmlCppEngine::handleRemoteSetupFailed(const QString &message) { EDEBUG("MASTER REMOTE SETUP FAILED"); - d->m_qmlEngine->handleRemoteSetupFailed(message); - d->m_cppEngine->handleRemoteSetupFailed(message); + foreach (DebuggerEngine *slaveEngine, d->m_enginesAwaitingRemoteSetup) + slaveEngine->handleRemoteSetupFailed(message); + d->m_enginesAwaitingRemoteSetup.clear(); } void QmlCppEngine::showMessage(const QString &msg, int channel, int timeout) const diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index a01ac4ef655..2b3b01bf6ae 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -124,6 +124,9 @@ protected: void notifyEngineRunAndInferiorRunOk(); void notifyInferiorShutdownOk(); +private slots: + void slaveEngineRequestedRemoteSetup(); + private: void engineStateChanged(DebuggerState newState); void setState(DebuggerState newState, bool forced = false); -- GitLab