From 7991b204fd7dd4909a853531cf8eb23835bbce39 Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Wed, 24 Aug 2011 12:13:39 +0200 Subject: DeclarativeDebug: Clear service name when returning from waitForMessage The service name is cleared in waitForMessage instead of receiveMessage so that consequent packets can de delivered to the service. A flag is used to check if the operation succeeded. Change-Id: I45b94a6194026d22ffb75a394628c7497ce4704e Reviewed-on: http://codereview.qt.nokia.com/3486 Reviewed-by: Qt Sanity Bot Reviewed-by: Kai Koehne --- src/declarative/debugger/qdeclarativedebugserver.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp index a69e01a6fe..e7785d0f90 100644 --- a/src/declarative/debugger/qdeclarativedebugserver.cpp +++ b/src/declarative/debugger/qdeclarativedebugserver.cpp @@ -91,6 +91,7 @@ public: QStringList clientPlugins; bool gotHello; QString waitingForMsgFromService; + bool waitingForMsgSucceeded; private: // private slot @@ -100,7 +101,8 @@ private: QDeclarativeDebugServerPrivate::QDeclarativeDebugServerPrivate() : connection(0), - gotHello(false) + gotHello(false), + waitingForMsgSucceeded(false) { } @@ -313,7 +315,7 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message) if (d->waitingForMsgFromService == name) { // deliver directly so that it is delivered before waitForMessage is returning. d->_q_deliverMessage(name, message); - d->waitingForMsgFromService.clear(); + d->waitingForMsgSucceeded = true; } else { // deliver message in next event loop run. // Fixes the case that the service does start it's own event loop ..., @@ -403,11 +405,13 @@ bool QDeclarativeDebugServer::waitForMessage(QDeclarativeDebugService *service) || !d->waitingForMsgFromService.isEmpty()) return false; + d->waitingForMsgSucceeded = false; d->waitingForMsgFromService = service->name(); do { d->connection->waitForMessage(); - } while (!d->waitingForMsgFromService.isEmpty()); + } while (!d->waitingForMsgSucceeded); + d->waitingForMsgFromService.clear(); return true; } -- cgit v1.2.3