diff -r a41df078684a -r 4122176ea935 kernel/eka/drivers/soundsc/soundldd.cpp --- a/kernel/eka/drivers/soundsc/soundldd.cpp Mon Oct 19 15:55:17 2009 +0100 +++ b/kernel/eka/drivers/soundsc/soundldd.cpp Mon Dec 21 16:14:42 2009 +0000 @@ -1660,12 +1660,13 @@ aTransferResult=KErrTimedOut; } #endif - __KTRACE_OPT(KSOUND1, Kern::Printf(">DSoundScLdd::RecordCallback(ID:%xH,Len:%d) - %d",aTransferID,aBytesRecorded,aTransferResult)); + __KTRACE_OPT(KSOUND1, Kern::Printf(">DSoundScLdd::RecordCallback(ID:%xH,Len:%d) - %d (iCurrentRecBufTf.iTfState %d)",aTransferID,aBytesRecorded,aTransferResult, iCurrentRecBufTf.iTfState)); // If the transfer fragment is not for the current record buffer and were not paused then ignore it. Either the PDD // has got very confused or more likely its a trailing fragment from an earlier buffer we have already failed. If // we're paused, the PDD doesn't need to bother with a transfer ID, we assume its for the current buffer. - if (aTransferID==iCurrentRecBufTf.iId || iState==EPaused) + if (iCurrentRecBufTf.iTfState != TSndScTransfer::ETfDone && + (aTransferID==iCurrentRecBufTf.iId || (aTransferID == 0 && iState==EPaused))) { // Update the count of bytes recorded. iBytesTransferred+=aBytesRecorded; @@ -1813,7 +1814,7 @@ TInt len=iCurrentRecBufTf.iAudioBuffer->GetFragmentLength(pos,iCurrentRecBufTf.GetNotStartedLen(),physAddr); r=Pdd()->TransferData(iCurrentRecBufTf.iId,(iBufManager->iChunkBase+pos),physAddr,len); - __KTRACE_OPT(KSOUND1, Kern::Printf("GetFragmentLength(pos,iNextRecBufTf.GetNotStartedLen(),physAddr); r=Pdd()->TransferData(iNextRecBufTf.iId,(iBufManager->iChunkBase+pos),physAddr,len); - __KTRACE_OPT(KSOUND1, Kern::Printf("