DeclarativeDebug: Clear service name when returning from waitForMessage
authorAurindam Jana <aurindam.jana@nokia.com>
Wed, 24 Aug 2011 10:13:39 +0000 (12:13 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 24 Aug 2011 11:51:39 +0000 (13:51 +0200)
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 <qt_sanity_bot@ovi.com>
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
src/declarative/debugger/qdeclarativedebugserver.cpp

index a69e01a..e7785d0 100644 (file)
@@ -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;
 }