diff -r 2d65c2f76d7b -r 4a8fed1c0ef6 userlibandfileserver/fileserver/sfile/sf_notify.cpp --- a/userlibandfileserver/fileserver/sfile/sf_notify.cpp Tue Feb 02 01:24:03 2010 +0200 +++ b/userlibandfileserver/fileserver/sfile/sf_notify.cpp Sat Feb 20 00:10:51 2010 +0200 @@ -333,6 +333,18 @@ return(isFound); } +CNotifyInfo* TBaseQue::DoFindEntry(CSessionFs* aSession, TRequestStatus* aStatus) + { + TDblQueIter q(iHeader); + CNotifyInfo* info; + while((info=q++)!=NULL) + { + if(info->Session()==aSession && (!aStatus || aStatus==info->Status())) + return info; + } + return NULL; + } + void TBaseQue::DoCancelAll(TInt aCompletionCode) // // Cancel all notifications @@ -654,13 +666,20 @@ TInt TDismountNotifyQue::CancelSession(CSessionFs* aSession,TInt aCompletionCode,TRequestStatus* aStatus) // -// +// Returns the drive number or KErrNotFound // { iQLock.Wait(); - TBool isFound=TBaseQue::DoCancelSession(aSession,aCompletionCode,aStatus); + + // return the drive number + CDismountNotifyInfo* info = (CDismountNotifyInfo*) DoFindEntry(aSession, aStatus); + TInt driveNumber = info ? info->DriveNumber() : KErrNotFound; + + TBaseQue::DoCancelSession(aSession,aCompletionCode,aStatus); + iQLock.Signal(); - return(isFound); + + return(driveNumber); } void TDismountNotifyQue::CancelAll(TInt aCompletionCode) @@ -929,14 +948,15 @@ iDebugQue.CancelSession(aSession,KErrCancel,aStatus); } -void FsNotify::CancelDismountNotifySession(CSessionFs* aSession, TRequestStatus* aStatus) +TInt FsNotify::CancelDismountNotifySession(CSessionFs* aSession, TRequestStatus* aStatus) // // Cancel all media removal notification(s) setup by aSession (if aStatus == NULL) -// else cancels all oustanding notifications(s) for the session +// else cancels all outstanding notifications(s) for the session // { __PRINT2(_L("FsNotify::CancelDismountNotifySession() aSession=0x%x aStatus=0x%x"),aSession,aStatus); - iDismountNotifyQue.CancelSession(aSession,KErrCancel,aStatus); + TInt drive = iDismountNotifyQue.CancelSession(aSession,KErrCancel,aStatus); + return drive; } void FsNotify::CancelSession(CSessionFs* aSession)