diff -r c53acadfccc6 -r acef663c1218 harvester/client/src/harvesterrequestqueue.cpp --- a/harvester/client/src/harvesterrequestqueue.cpp Mon Jan 18 20:34:07 2010 +0200 +++ b/harvester/client/src/harvesterrequestqueue.cpp Tue Jan 26 12:13:20 2010 +0200 @@ -45,7 +45,7 @@ // C++ default constructor can NOT contain any code, that might leave. // --------------------------------------------------------------------------- // -CHarvesterRequestQueue::CHarvesterRequestQueue(): CActive( CActive::EPriorityStandard ) +CHarvesterRequestQueue::CHarvesterRequestQueue(): CActive( CActive::EPriorityUserInput ) { CActiveScheduler::Add( this ); } @@ -119,61 +119,81 @@ WRITELOG2( "CHarvesterRequestQueue::RunL() begin - requests: %d, active requests: %d", iRequests.Count(), iActiveRequests ); - CHarvesterRequestActive* selectedRequest = NULL; - - for ( TInt i = 0; i < iRequests.Count(); i++ ) + const TInt status = iStatus.Int(); + + if ( status >= KErrNone && !iShutdown ) { - CHarvesterRequestActive* request = iRequests[i]; - - // remove completed tasks - if ( request->RequestCompleted() && !request->IsActive() ) + CHarvesterRequestActive* selectedRequest = NULL; + + for ( TInt i = 0; i < iRequests.Count(); i++ ) { - // delete completed task - delete request; - iRequests.Remove( i ); + CHarvesterRequestActive* request = iRequests[i]; + + // remove completed tasks + if ( !request || (request->RequestCompleted() && !request->IsActive()) ) + { + // delete completed task + delete request; + request = NULL; + iRequests.Remove( i ); + + // correct the index so that no tasks are skipped + i--; + if(i <= -1) + { + i = -1; + } - // correct the index so that no tasks are skipped - i--; - if(i <= -1) + WRITELOG( "CHarvesterRequestQueue::RunL() - removing completed request"); + } + // select priorised task + else { - i = -1; + // not yet activated + if( !request->IsActive() ) + { + selectedRequest = request; + break; + } } - - WRITELOG( "CHarvesterRequestQueue::RunL() - removing completed request"); + } + + // activate selected + if ( selectedRequest && !iShutdown ) + { + iActiveRequests++; + selectedRequest->Start(); } - // select priorised task + +#ifdef _DEBUG + WRITELOG2( "CHarvesterRequestQueue::RunL() end - requests: %d, active requests: %d", + iRequests.Count(), iActiveRequests ); +#endif + + // continue processing if needed + if ( !iShutdown && (iActiveRequests < KMaxClientRequests) && + (iRequests.Count() > iActiveRequests)) + { + SetActive(); + TRequestStatus* statusPtr = &iStatus; + User::RequestComplete( statusPtr, KErrNone ); + } else { - // not yet activated - if( !request->IsActive() ) - { - selectedRequest = request; - } + iRequests.Compress(); } } - - // activate selected - if ( selectedRequest ) + else if( status != KErrCancel ) { - iActiveRequests++; - selectedRequest->Start(); + // continue processing if needed + if ( !iShutdown && (iActiveRequests < KMaxClientRequests) && + (iRequests.Count() > iActiveRequests)) + { + SetActive(); + TRequestStatus* statusPtr = &iStatus; + User::RequestComplete( statusPtr, KErrNone ); + } } - - WRITELOG2( "CHarvesterRequestQueue::RunL() end - requests: %d, active requests: %d", - iRequests.Count(), iActiveRequests ); - - // continue processing if needed - if ( !iShutdown && (iActiveRequests < KMaxClientRequests) && - (iRequests.Count() > iActiveRequests)) - { - SetActive(); - TRequestStatus* statusPtr = &iStatus; - User::RequestComplete( statusPtr, KErrNone ); - } - else - { - iRequests.Compress(); - } } // --------------------------------------------------------------------------- @@ -203,13 +223,18 @@ void CHarvesterRequestQueue::DoCancel() { WRITELOG( "CHarvesterRequestQueue::DoCancel()"); + + iShutdown = ETrue; - for( TInt i(0); i < iRequests.Count(); i++ ) + const TInt count( iRequests.Count() ); + for( TInt i = 0; i < count; i++ ) { - iRequests[i]->Cancel(); + CHarvesterRequestActive* request = iRequests[i]; + if( request ) + { + request->Cancel(); + } } - - iShutdown = ETrue; } @@ -247,30 +272,40 @@ { WRITELOG( "CHarvesterRequestQueue::ForceRequests()"); - Cancel(); - for ( TInt i = 0; i < iRequests.Count(); i++ ) { CHarvesterRequestActive* request = iRequests[i]; - // remove completed tasks - if ( request->RequestCompleted() ) + + if ( request && !request->RequestCompleted() ) { - // delete completed task - delete request; - iRequests.Remove( i ); + request->ForceHarvest(); + } + // delete completed task + delete request; + request = NULL; + iRequests.Remove( i ); - // correct the index so that no tasks are skipped - i--; - if(i <= -1) - { - i = -1; - } - } - else + // correct the index so that no tasks are skipped + i--; + if(i <= -1) { - iRequests[i]->ForceHarvest(); + i = -1; } } } +// --------------------------------------------------------------------------- +// CHarvesterRequestQueue::DoCancel() +// --------------------------------------------------------------------------- +// +TBool CHarvesterRequestQueue::RequestsPending() + { + if( iRequests.Count() > 0 ) + { + return ETrue; + } + return EFalse; + } + // End of file +