diff -r d4d56f5e7c55 -r 65456528cac2 searcher/searchserver/src/ccpixsearch.cpp --- a/searcher/searchserver/src/ccpixsearch.cpp Tue Oct 05 13:15:12 2010 +0530 +++ b/searcher/searchserver/src/ccpixsearch.cpp Fri Oct 15 12:09:28 2010 +0530 @@ -27,7 +27,7 @@ #endif - +Cpt::Mutex CCPixSearch::hitMutex_; CCPixSearch* CCPixSearch::NewL() { @@ -121,12 +121,15 @@ void CCPixSearch::CompletionCallback(void *aCookie, cpix_JobId aJobId) { CCPixSearch* object = (CCPixSearch*)aCookie; - + { + Cpt::SyncRegion + sr(hitMutex_); // Sanity check if (object == NULL || object->iPendingJobId != aJobId) return; - + + } // Call the asyncronizers completion code CCPixAsyncronizer* asyncronizer = object->iAsyncronizer; asyncronizer->CompletionCallback(); @@ -174,11 +177,14 @@ // Commit the search if ( iQuery ) { + { + Cpt::SyncRegion + sr(hitMutex_); iPendingJobId = cpix_IdxSearcher_asyncSearch(iIdxDb, iQuery, (void*)this, &CompletionCallback); SearchServerHelper::CheckCpixErrorL(iIdxDb, KErrDatabaseQueryFailed); iPendingTask = EPendingTaskSearch; iAsyncronizer->Start(ECPixTaskTypeSearch, aObserver, aMessage); - + } OstTraceFunctionExit0( CCPIXSEARCH_SEARCHL_EXIT ); return ETrue; } @@ -222,7 +228,11 @@ iCurrentCpixDocument = new cpix_Document; iCurrentCpixDocument->ptr_ = NULL; + { + Cpt::SyncRegion + sr(hitMutex_); iPendingJobId = cpix_Hits_asyncDoc(iHits, aIndex, &iCurrentCpixDocument, (void*)this, &CompletionCallback,1); + if ( cpix_Failed(iHits) ) { SearchServerHelper::LogErrorL(*(iHits->err_)); @@ -230,7 +240,9 @@ User::Leave(KErrDocumentAccessFailed); } iAsyncronizer->Start(ECPixTaskTypeGetDocument, aObserver, aMessage); + } OstTraceFunctionExit0( CCPIXSEARCH_GETDOCUMENTL_EXIT ); + } void CCPixSearch::GetBatchDocumentL(TInt aIndex, MCPixAsyncronizerObserver* aObserver, const RMessage2& aMessage, TInt aCount) @@ -254,7 +266,11 @@ } iPendingTask = EPendingTaskDocument; + { + Cpt::SyncRegion + sr(hitMutex_); iPendingJobId = cpix_Hits_asyncDoc(iHits, aIndex, ibatchDocuments, (void*)this, &CompletionCallback, aCount); + if ( cpix_Failed(iHits) ) { SearchServerHelper::LogErrorL(*(iHits->err_)); @@ -262,6 +278,7 @@ User::Leave(KErrDocumentAccessFailed); } iAsyncronizer->Start(ECPixTaskTypeGetBatchDocument, aObserver, aMessage); + } } CSearchDocument* CCPixSearch::GetDocumentCompleteL() @@ -276,69 +293,6 @@ SearchServerHelper::CheckCpixErrorL(iHits, KErrDocumentAccessFailed); return ConvertDocumentL( iCurrentCpixDocument ); -#if 0 // TODO XXX TIM - const wchar_t* documentId = cpix_Document_getFieldValue(&iCurrentCpixDocument, LCPIX_DOCUID_FIELD); - SearchServerHelper::CheckCpixErrorL(&iCurrentCpixDocument, KErrDatabaseQueryFailed); - - TPtrC documentIdPtr(KNullDesC); - if (documentId) - documentIdPtr.Set(reinterpret_cast(documentId)); - - const wchar_t* documentAppClass = cpix_Document_getFieldValue(&iCurrentCpixDocument, LCPIX_APPCLASS_FIELD); - SearchServerHelper::CheckCpixErrorL(&iCurrentCpixDocument, KErrDatabaseQueryFailed); - - TPtrC documentAppClassPtr(KNullDesC); - if (documentAppClass) - documentAppClassPtr.Set(reinterpret_cast(documentAppClass)); - - const wchar_t* documentExcerpt = cpix_Document_getFieldValue(&iCurrentCpixDocument, LCPIX_EXCERPT_FIELD); - SearchServerHelper::CheckCpixErrorL(&iCurrentCpixDocument, KErrDatabaseQueryFailed); - - TPtrC documentExcerptPtr(KNullDesC); - if (documentExcerpt) - documentExcerptPtr.Set(reinterpret_cast(documentExcerpt)); - - CSearchDocument* document = CSearchDocument::NewLC(documentIdPtr, documentAppClassPtr, documentExcerptPtr); - - cpix_DocFieldEnum* docFieldEnum = cpix_Document_fields(&iCurrentCpixDocument); - - // push to cleanup stack. - CleanupStack::PushL( TCleanupItem(CpixDocFieldEnumDestroyer, docFieldEnum) ); - - SearchServerHelper::CheckCpixErrorL(&iCurrentCpixDocument, KErrDocumentAccessFailed); - - cpix_Field field; - - while (cpix_DocFieldEnum_hasMore(docFieldEnum)) - { - cpix_DocFieldEnum_next(docFieldEnum, &field); - SearchServerHelper::CheckCpixErrorL(docFieldEnum, KErrDatabaseQueryFailed); - - const wchar_t* name = cpix_Field_name(&field); - SearchServerHelper::CheckCpixErrorL(&field, KErrDatabaseQueryFailed); - - TPtrC namePtr( reinterpret_cast( name ) ); - if ( namePtr == TPtrC( (TUint16*)LCPIX_DOCUID_FIELD ) - || namePtr == TPtrC( (TUint16*)LCPIX_APPCLASS_FIELD ) - || namePtr == TPtrC( (TUint16*)LCPIX_EXCERPT_FIELD ) ) - { - continue; // These fields have already been added - } - - const wchar_t* value = cpix_Field_stringValue(&field); - SearchServerHelper::CheckCpixErrorL(&field, KErrDatabaseQueryFailed); - - TPtrC stringvalue( reinterpret_cast( value ) ); - document->AddFieldL(namePtr, stringvalue); - } - - CleanupStack::PopAndDestroy(docFieldEnum); - - CleanupStack::Pop(document); - - OstTraceFunctionExit0( CCPIXSEARCH_GETDOCUMENTCOMPLETEL_EXIT ); - return document; -#endif // 0 } RPointerArray CCPixSearch::GetBatchDocumentCompleteL()