devsound/a3fdevsound/src/devsoundadaptor/cdevtonecontrol.cpp
branchRCL_3
changeset 12 b74061f7f3d2
parent 0 40261b775718
--- a/devsound/a3fdevsound/src/devsoundadaptor/cdevtonecontrol.cpp	Wed Mar 31 23:56:23 2010 +0300
+++ b/devsound/a3fdevsound/src/devsoundadaptor/cdevtonecontrol.cpp	Wed Apr 14 17:32:53 2010 +0300
@@ -156,7 +156,7 @@
 	err = iDevAudio->iAudioStream->Initialize();
 	if (err == KErrNone)
 		{
-		err = iDevAudio->iAudioContext->Commit();
+		err = iDevAudio->CommitAudioContext();
 		}
 	if (err == KErrNone)
 		{
@@ -195,7 +195,7 @@
 				}
 			if ( err == KErrNone)
 				{
-				err = iDevAudio->iAudioContext->Commit();
+				err = iDevAudio->CommitAudioContext();
 				}
 			if(err == KErrNone)
 				{
@@ -204,8 +204,28 @@
 			}
 			break;
 
+		case EDevSoundAdaptorGoingActive:
+			{
+			//If following condition is false, then we are here because of a
+			//pre-emption clash in last Commit cycle started from
+			//CDevCommonControl::ContextEventUpdateWithStateEventNoError.
+			if(iDevAudio->iPreviousState != EDevSoundAdaptorActivating)
+				{
+				break;
+				}
+			//Fall through as required
+			}
 		case EDevSoundAdaptorPaused_Primed:
 		case EDevSoundAdaptorInitialised_Idle:
+			{
+			//If following condition is true, then we are here because of a
+			//pre-emption clash in last Commit cycle started from
+			//CDevCommonControl::ContextEventUpdateWithStateEventAndError.
+			if(iDevAudio->iPreviousState == EDevSoundAdaptorUnloading)
+				{
+				err = Unload();
+				break;
+				}
 			DP0(DLINFO, "Already in loaded state");
 			err = iDevAudio->RequestGainAndBalance(this);
 			if (err==KErrNone)
@@ -214,13 +234,14 @@
 				}
 			if (err == KErrNone)
 				{
-				err = iDevAudio->iAudioContext->Commit();
+				err = iDevAudio->CommitAudioContext();
 				}
 			if (err == KErrNone)
 				{
 				iDevAudio->iActiveState = EDevSoundAdaptorActivating;
 				}
 			break;
+			}
 		case EDevSoundAdaptorActive_Active:
 		default:
 			err = KErrNotReady;
@@ -339,7 +360,7 @@
 	TInt err = iDevAudio->iAudioStream->Stop();
 	if ( err == KErrNone)
 		{
-		err = iDevAudio->iAudioContext->Commit();
+		err = iDevAudio->CommitAudioContext();
 		if(err == KErrNone)
 			{
 			iDevAudio->iActiveState = EDevSoundAdaptorStopping;