diff -r d4d56f5e7c55 -r 65456528cac2 searcher/searchserver/src/ccpixidxdb.cpp --- 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(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.