--- 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.