searcher/searchserver/src/ccpixidxdb.cpp
changeset 24 65456528cac2
parent 8 6547bf8ca13a
--- a/searcher/searchserver/src/ccpixidxdb.cpp	Tue Oct 05 13:15:12 2010 +0530
+++ b/searcher/searchserver/src/ccpixidxdb.cpp	Fri Oct 15 12:09:28 2010 +0530
@@ -86,6 +86,9 @@
 
 } // namespace
 
+
+Cpt::Mutex CCPixIdxDb::idxMutex_;
+
 CCPixIdxDb* CCPixIdxDb::NewL()
 	{
 	CCPixIdxDb* self = CCPixIdxDb::NewLC();
@@ -130,12 +133,17 @@
 void CCPixIdxDb::CompletionCallback(void *aCookie, cpix_JobId aJobId)
 	{
 	CCPixIdxDb* object = (CCPixIdxDb*)aCookie;
-
+    
+	{
+	    Cpt::SyncRegion
+	                sr(idxMutex_);
 	// Sanity check
 	if (object == NULL || 
 		object->iPendingJobId != aJobId)
 		return;
 	
+	}
+	
 	// Call the asyncronizers completion code
 	CCPixAsyncronizer* asyncronizer = object->iAsyncronizer;
 	asyncronizer->CompletionCallback();
@@ -299,12 +307,16 @@
 	OstTrace0( TRACE_NORMAL, CCPIXIDXDB_ADDL, "CCPixIdxDb::AddL" );
 	CPIXLOGSTRING("CCPixIdxDb::AddL");
 	DumpDocument(aDocument);
+	   {
+	        Cpt::SyncRegion
+	                    sr(idxMutex_);
 	iPendingJobId = cpix_IdxDb_asyncAdd(iIdxDb, document, iAnalyzer, (void*)this, &CompletionCallback);
 	CleanupStack::PopAndDestroy(document);
 	SearchServerHelper::CheckCpixErrorL(iIdxDb, KErrCannotAddDocument);
     iIsPending = ETrue;
 	
 	iAsyncronizer->Start(ECPixTaskTypeAdd, aObserver, aMessage);
+	   }
 	}
 	
 void CCPixIdxDb::AddCompleteL()
@@ -325,12 +337,16 @@
 	OstTrace0( TRACE_NORMAL, CCPIXIDXDB_UPDATEL, "CCPixIdxDb::UpdateL" );
 	CPIXLOGSTRING("CCPixIdxDb::UpdateL");
 	DumpDocument(aDocument);
+	   {
+	        Cpt::SyncRegion
+	                    sr(idxMutex_);
     iPendingJobId = cpix_IdxDb_asyncUpdate(iIdxDb, document, iAnalyzer, (void*)this, &CompletionCallback);
 	CleanupStack::PopAndDestroy(document);
 	SearchServerHelper::CheckCpixErrorL(iIdxDb,KErrCannotUpdateDocument);
     iIsPending = ETrue;
 
     iAsyncronizer->Start(ECPixTaskTypeUpdate, aObserver, aMessage);
+	   }
 	}
 
 void CCPixIdxDb::UpdateCompleteL()
@@ -355,11 +371,15 @@
 	const wchar_t* cDocumentId = reinterpret_cast<const wchar_t*>(docUidPtr.PtrZ());
 
     iIsPending = ETrue;
+    {
+        Cpt::SyncRegion
+                    sr(idxMutex_);
     iPendingJobId = cpix_IdxDb_asyncDeleteDocuments(iIdxDb, cDocumentId, (void*)this, &CompletionCallback);
     SearchServerHelper::CheckCpixErrorL(iIdxDb, KErrCannotDeleteDocument);
 	CleanupStack::PopAndDestroy(docUid);	 
 	
     iAsyncronizer->Start(ECPixTaskTypeDelete, aObserver, aMessage);
+    }
 	}
 
 void CCPixIdxDb::DeleteDocumentsCompleteL()
@@ -421,13 +441,16 @@
     if (iIsPending)
         User::Leave(KErrInUse);
 
-    
+    {
+        Cpt::SyncRegion
+                    sr(idxMutex_);
     iPendingJobId = cpix_IdxDb_asyncFlush(iIdxDb, (void*)this, &CompletionCallback);
     SearchServerHelper::CheckCpixErrorL(iIdxDb, KErrDatabaseFlushFailed);
     iIsPending = ETrue;
     
     iAsyncronizer->Start(ECPixTaskTypeFlush, aObserver, aMessage);
     }
+    }
 
 const char* CCPixIdxDb::GetFieldCStrLC(const CSearchDocument& aDocument, const TDesC& aFieldName )
 	{
@@ -486,7 +509,6 @@
 	if (!doc)
 		{
 		SearchServerHelper::LogErrorL(*result.err_);
-		cpix_ClearError(doc);
 		User::Leave(KErrCannotCreateDocument);
 		}
 	// document created, push to cleanup stack.