metadataengine/client/src/mdequery.cpp
branchRCL_3
changeset 6 646a02f170b9
parent 0 c53acadfccc6
child 7 3cebc1a84278
--- a/metadataengine/client/src/mdequery.cpp	Fri Feb 19 23:14:48 2010 +0200
+++ b/metadataengine/client/src/mdequery.cpp	Fri Mar 12 15:44:28 2010 +0200
@@ -28,7 +28,7 @@
 CMdEQuery::CMdEQuery(TQueryType aType, CMdESession& aSession, CMdENamespaceDef& aNamespaceDef)
         : iQueryId( 0 ), iSession(aSession), iNamespaceDef(aNamespaceDef), iType(aType), 
           iResultMode(EQueryResultModeItem), iState(EStateNew), iError(KErrNone), 
-          iObjectResult(NULL), iCountResult(0), iDistinctResults(NULL)
+          iObjectResult(NULL), iCountResult(0), iDistinctResults(NULL), iDestroyed(EFalse)
     {
     }
 
@@ -41,6 +41,7 @@
 
 CMdEQuery::~CMdEQuery()
 	{
+    iDestroyed = ETrue;
 	Cancel();
   
     // This will destroy the entire conditions tree.
@@ -204,7 +205,10 @@
     if( incomplete || IsComplete() == EFalse )
     	{
     	iState = EStateError;
-    	NotifyCompleted( KErrCancel );
+    	if( !iDestroyed )
+    	    {
+            NotifyCompleted( KErrCancel );
+    	    }
     	}
     }
 
@@ -538,11 +542,14 @@
 
     // Update the latest error code.
     iError = aError;
-	for (TInt i = iObservers.Count() - 1; i >= 0; --i)
-		{
-		MMdEQueryObserver* observer = iObservers[i];
-		observer->HandleQueryCompleted(*this, aError);
-		}
+    for (TInt i = iObservers.Count() - 1; i >= 0; --i)
+        {
+        MMdEQueryObserver* observer = iObservers[i];
+        if( observer )
+            {
+            observer->HandleQueryCompleted(*this, aError);
+            }
+        }
     }