kernel/eka/drivers/soundsc/soundldd.cpp
changeset 15 4122176ea935
parent 0 a41df078684a
--- 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("<PDD:TransferData(off:%x len:%d) - %d",pos,len,r));
+		__KTRACE_OPT(KSOUND1, Kern::Printf("<PDD:TransferData(off:%x len:%d) A - %d",pos,len,r));
 		if (r==KErrNone)
 			iCurrentRecBufTf.SetStarted(len);	// Successfully queued a transfer - update the status.
 		}
@@ -1828,7 +1829,7 @@
 		TInt len=iNextRecBufTf.iAudioBuffer->GetFragmentLength(pos,iNextRecBufTf.GetNotStartedLen(),physAddr);
 		
 		r=Pdd()->TransferData(iNextRecBufTf.iId,(iBufManager->iChunkBase+pos),physAddr,len);
-		__KTRACE_OPT(KSOUND1, Kern::Printf("<PDD:TransferData(off:%x len:%d) - %d",pos,len,r));
+		__KTRACE_OPT(KSOUND1, Kern::Printf("<PDD:TransferData(off:%x len:%d) B - %d",pos,len,r));
 		if (r==KErrNone)
 			iNextRecBufTf.SetStarted(len);	// Successfully queued a transfer - update the status.
 		}