qthighway/xqservice/src/xqaiwservicedriver.cpp
changeset 11 06b8e2af4411
parent 4 90517678cc4f
--- a/qthighway/xqservice/src/xqaiwservicedriver.cpp	Thu May 27 13:42:11 2010 +0300
+++ b/qthighway/xqservice/src/xqaiwservicedriver.cpp	Fri Jun 11 14:26:25 2010 +0300
@@ -40,7 +40,8 @@
 XQAiwServiceDriver::XQAiwServiceDriver(const XQAiwInterfaceDescriptor& descriptor, const QString &operation)
     : XQAiwRequestDriver(),
       currentRequest(NULL),
-      asyncErrorSet(false)
+      completeSignalConnected(false),
+      errorSignalConnected(false)
     {
     mErrorMsg = "";
     mDescr = descriptor; 
@@ -58,10 +59,13 @@
 {
     XQSERVICE_DEBUG_PRINT("~XQAiwServiceDriver::XQAiwServiceDriver");
 
-    // Disconnect error
-    if (asyncErrorSet)
+    // Disconnect signals
+    if (completeSignalConnected)
     {
         disconnect(currentRequest, SIGNAL(requestCompleted(const QVariant&)), this, SLOT(handleAsyncResponse(const QVariant&)));
+    }
+    if (errorSignalConnected)
+    {
         disconnect(currentRequest, SIGNAL(requestError(int)), this, SLOT(handleAsyncError(int)));
     }
     
@@ -143,15 +147,19 @@
     
     QStringList list;
     bool res = true;
-    if (!currentRequest->isSynchronous() && !asyncErrorSet)
+    if (!currentRequest->isSynchronous() && !completeSignalConnected)
     {
-        // Async request 
+        // Async request. Connect signal only once
         XQSERVICE_DEBUG_PRINT("request::async send");
         connect(currentRequest, SIGNAL(requestCompleted(const QVariant&)), this, SLOT(handleAsyncResponse(const QVariant&)));
+        completeSignalConnected = true;
+    }
+    if (!errorSignalConnected)
+    {
+        // Connect error signal only once
         connect(currentRequest, SIGNAL(requestError(int)), this, SLOT(handleAsyncError(int)));
-        asyncErrorSet = true;
+        errorSignalConnected = true;
     }
-
     
     XQSERVICE_DEBUG_PRINT("request::send>>>");
     res = currentRequest->send(retValue);  // Result is valid for sync request only