# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1286975710 -10800 # Node ID af86cc8a4692a58199e8e3abb410abcbd2ef7f67 # Parent e51ae4fd18e65c88e463f8d60ab38f1c0a3bac61 Revision: 201039 Kit: 201041 diff -r e51ae4fd18e6 -r af86cc8a4692 devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.cpp --- a/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.cpp Wed Sep 15 13:51:05 2010 +0300 +++ b/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.cpp Wed Oct 13 16:15:10 2010 +0300 @@ -269,8 +269,25 @@ iAsyncQueueStart->Cancel(); // just in case. ResetNotifiedError(); + if (aMessage.Function() == RMessage2::EDisConnect) + { + TBool complete = iAdapter->CloseDevSound(); + if(!complete) + { + iRequestBeingServiced.SetMessage(aMessage); + iOperationCompletePending = ETrue; + ResetNotifiedError(); + } + else + { + // if we get here, iClosing wait will have been started and we'd be waiting + iClosingWait->AsyncStop(); + } + return; + } + TMMFMessageDestinationPckg destinationPckg; - MmfMessageUtil::ReadL(aMessage, 0, destinationPckg); + User::LeaveIfError(MessageRead(aMessage, 0, destinationPckg)); SYMBIAN_DEBPRN2(_L("CMMFDevSoundSession[0x%x]::DoServiceRequestL - DestinationHandle [%d] InterfaceId [%d] "), destinationPckg().DestinationHandle(), destinationPckg().InterfaceId()); if ((destinationPckg().DestinationHandle() == KMMFObjectHandleDevSound) && (destinationPckg().InterfaceId() == KUidInterfaceMMFDevSound)) @@ -459,21 +476,6 @@ } } } - else if (aMessage.Function() == RMessage2::EDisConnect) - { - TBool complete = iAdapter->CloseDevSound(); - if(!complete) - { - iRequestBeingServiced.SetMessage(aMessage); - iOperationCompletePending = ETrue; - ResetNotifiedError(); - } - else - { - // if we get here, iClosing wait will have been started and we'd be waiting - iClosingWait->AsyncStop(); - } - } else { // If there's a CI extension, see if that handles this request @@ -578,12 +580,14 @@ void CMMFDevSoundSession::EnqueueRequest(const RMmfIpcMessage& aMessage) { + SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::EnqueueRequest - Enter")); // Encapsule the request TMMFDevSoundRequest request; request.SetMessage(aMessage); // Append TInt error = iQueuedRequests.Append(request); - __ASSERT_DEBUG(error == KErrNone, Panic(EQueueRequestsFailedToAppend)); + __ASSERT_DEBUG(error == KErrNone, Panic(EQueueRequestsFailedToAppend)); + SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::EnqueueRequest - Exit")); } // @@ -607,7 +611,7 @@ User::LeaveIfError(err); DoSetClientConfigL();// added here instead of the CreateL() TMMFDevSoundProxySettingsPckg devSoundBuf; - MmfMessageUtil::ReadL(aMessage,1,devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,1,devSoundBuf)); iCachedClientData = devSoundBuf; TMMFState mode = devSoundBuf().iMode; iAdapter->InitializeL(mode); @@ -644,7 +648,7 @@ User::LeaveIfError(err); DoSetClientConfigL();// added here instead of the CreateL() TMMFDevSoundProxySettingsPckg devSoundBuf; - MmfMessageUtil::ReadL(aMessage,1,devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,1,devSoundBuf)); iCachedClientData = devSoundBuf; TUid HWDev = devSoundBuf().iHWDev; TMMFState mode = devSoundBuf().iMode; @@ -678,7 +682,7 @@ User::LeaveIfError(err); DoSetClientConfigL();// added here instead of the CreateL() TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage, TInt(1), devSoundBuf)); iCachedClientData = devSoundBuf; TFourCC desiredFourCC = devSoundBuf().iDesiredFourCC; TMMFState mode = devSoundBuf().iMode; @@ -718,7 +722,6 @@ { aMessage.Complete(err); iOperationCompletePending = EFalse; - return ETrue; } else { @@ -755,7 +758,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iConfig = iAdapter->Config(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -766,7 +769,7 @@ TBool CMMFDevSoundSession::DoSetConfigL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TMMFCapabilities config = devSoundBuf().iConfig; iAdapter->SetConfigL(config); iOperationCompletePending = ETrue; @@ -782,7 +785,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iMaxVolume = iAdapter->MaxVolume(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -795,7 +798,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iVolume = iAdapter->Volume(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -806,7 +809,7 @@ TBool CMMFDevSoundSession::DoSetVolumeL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage, TInt(1),devSoundBuf)); TInt volume = devSoundBuf().iVolume; TBool asyncOperation; User::LeaveIfError(iAdapter->SetVolume(volume, asyncOperation)); @@ -823,7 +826,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iMaxGain = iAdapter->MaxGain(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -836,7 +839,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iGain = iAdapter->Gain(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -847,7 +850,7 @@ TBool CMMFDevSoundSession::DoSetGainL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TInt gain = devSoundBuf().iGain; TBool asyncOperation; User::LeaveIfError(iAdapter->SetGain(gain, asyncOperation)); @@ -864,7 +867,7 @@ TMMFDevSoundProxySettings devSoundSet; iAdapter->GetPlayBalanceL(devSoundSet.iLeftPercentage, devSoundSet.iRightPercentage); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -875,7 +878,7 @@ TBool CMMFDevSoundSession::DoSetPlayBalanceL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TInt leftPercentage = devSoundBuf().iLeftPercentage; TInt rightPercentage = devSoundBuf().iRightPercentage; TBool asyncOperation; @@ -893,7 +896,7 @@ TMMFDevSoundProxySettings devSoundSet; iAdapter->GetRecordBalanceL(devSoundSet.iLeftPercentage, devSoundSet.iRightPercentage); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -904,7 +907,7 @@ TBool CMMFDevSoundSession::DoSetRecordBalanceL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TInt leftPercentage = devSoundBuf().iLeftPercentage; TInt rightPercentage = devSoundBuf().iRightPercentage; TBool asyncOperation; @@ -970,7 +973,7 @@ } TMMFDevSoundProxyHwBufPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); iBufferPlay->SetLastBuffer(devSoundBuf().iLastBuffer); TPtr8 dataPtr(iChunk.Base(), devSoundBuf().iBufferSize, devSoundBuf().iBufferSize); @@ -1002,7 +1005,7 @@ TBool completed = iAdapter->Stop(); if (completed) { - iQueuedRequests.Reset(); + FlushQueuedRequests(); FlushEventQueue(); // completed returned here means we were idle to start with. TODO could possibly skip this flush iChunk.Close(); } @@ -1030,7 +1033,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoPlayToneL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); iCachedClientData = devSoundBuf; TInt frequency = devSoundBuf().iFrequencyOne; TTimeIntervalMicroSeconds duration(devSoundBuf().iDuration); @@ -1060,7 +1063,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoPlayDualToneL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); iCachedClientData = devSoundBuf; TInt frequencyOne = devSoundBuf().iFrequencyOne; TInt frequencyTwo = devSoundBuf().iFrequencyTwo; @@ -1101,8 +1104,7 @@ iDtmfString = HBufC::NewL(dtmfLength); TPtr dtmfPtr = iDtmfString->Des(); - aMessage.ReadL(TInt(2), dtmfPtr); - + User::LeaveIfError(MessageRead(aMessage, TInt(2), dtmfPtr)); iAdapter->PlayDTMFStringL(*iDtmfString); iOperationCompletePending = ETrue; SYMBIAN_DEBPRN1(_L("CMMFDevSoundSession[0x%x]::DoPlayDTMFStringL - Exit. Return value is [%d]"), ETrue); @@ -1136,7 +1138,7 @@ iToneSeqBuf = HBufC8::NewL(toneLength); TPtr8 toneSeqPtr = iToneSeqBuf->Des(); - aMessage.ReadL(TInt(1), toneSeqPtr); + User::LeaveIfError(MessageRead(aMessage,TInt(1), toneSeqPtr)); iAdapter->PlayToneSequenceL(*iToneSeqBuf); iOperationCompletePending = ETrue; @@ -1162,7 +1164,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoPlayFixedSequenceL - Enter")); TPckgBuf buf; - aMessage.ReadL(TInt(1),buf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),buf)); TInt seqNum = buf(); iSeqNum = seqNum; iAdapter->PlayFixedSequenceL(seqNum); @@ -1189,7 +1191,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoSetDTMFLengthsL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TTimeIntervalMicroSeconds32 toneOnLength = devSoundBuf().iToneOnLength; TTimeIntervalMicroSeconds32 toneOffLength = devSoundBuf().iToneOffLength; TTimeIntervalMicroSeconds32 pauseLength = devSoundBuf().iPauseLength; @@ -1206,7 +1208,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoSetVolumeRampL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TTimeIntervalMicroSeconds duration = devSoundBuf().iDuration; User::LeaveIfError(iAdapter->SetVolumeRamp(duration)); iOperationCompletePending = EFalse; // Volume ramp doesn't result on commit @@ -1224,14 +1226,14 @@ iArray.Reset(); TMMFPrioritySettingsPckg prioritySetBuf; - aMessage.ReadL(TInt(1),prioritySetBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),prioritySetBuf)); TMMFPrioritySettings prioritySet = prioritySetBuf(); iAdapter->GetSupportedInputDataTypesL(iArray, prioritySet); TPckgBuf pckg; pckg() = iArray.Count(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1246,14 +1248,14 @@ iArray.Reset(); TMMFPrioritySettingsPckg prioritySetBuf; - aMessage.ReadL(TInt(1),prioritySetBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),prioritySetBuf)); TMMFPrioritySettings prioritySet = prioritySetBuf(); iAdapter->GetSupportedOutputDataTypesL(iArray, prioritySet); TPckgBuf pckg; pckg() = iArray.Count(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1266,7 +1268,7 @@ { TPckgBuf pckg; pckg() = iAdapter->SamplesRecorded(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1278,7 +1280,7 @@ { TPckgBuf pckg; pckg() = iAdapter->SamplesPlayed(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1290,10 +1292,10 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoSetToneRepeatsL - Enter")); TPckgBuf countRepeat; - aMessage.ReadL(TInt(1),countRepeat); + User::LeaveIfError(MessageRead(aMessage,TInt(1),countRepeat)); TPckgBuf repeatTS; - aMessage.ReadL(TInt(2),repeatTS); + User::LeaveIfError(MessageRead(aMessage,TInt(2),repeatTS)); User::LeaveIfError(iAdapter->SetToneRepeats(countRepeat(), repeatTS())); SYMBIAN_DEBPRN1(_L("CMMFDevSoundSession[0x%x]::DoSetToneRepeatsL - Exit. Return value is [%d]"), ETrue); return ETrue; @@ -1307,7 +1309,7 @@ const RMmfIpcMessage& aMessage) { TPckgBuf prioritySet; - aMessage.ReadL(TInt(1),prioritySet); + User::LeaveIfError(MessageRead(aMessage,TInt(1),prioritySet)); User::LeaveIfError(iAdapter->SetPrioritySettings(prioritySet())); iOperationCompletePending = EFalse; @@ -1326,7 +1328,7 @@ TInt fixSeqCount = iAdapter->FixedSequenceCount(); fixSeqCountPckg = fixSeqCount; - aMessage.WriteL(TInt(2),fixSeqCountPckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),fixSeqCountPckg)); SYMBIAN_DEBPRN1(_L("CMMFDevSoundSession[0x%x]::DoFixedSequenceCountL - Exit. Return value is [%d]"), ETrue); return ETrue; } @@ -1354,7 +1356,7 @@ stream.WriteInt32L(iArray[i].FourCC()); i++; } - aMessage.WriteL(TInt(2), dataCopyBuffer->Ptr(0)); + User::LeaveIfError(MessageWrite(aMessage, TInt(2), dataCopyBuffer->Ptr(0))); stream.Close(); CleanupStack::PopAndDestroy(&stream); CleanupStack::PopAndDestroy(dataCopyBuffer); @@ -1377,14 +1379,14 @@ return EFalse; } TPckgBuf requestChunkBuf; - MmfMessageUtil::Read(aMessage, TInt(1), requestChunkBuf); + User::LeaveIfError(MessageRead(aMessage, TInt(1), requestChunkBuf)); TBool requestChunk = requestChunkBuf(); if (requestChunk) { // if the client requests, always do EOpen iHwBufPckgFill().iChunkOp = EOpen; } - TInt err = MmfMessageUtil::Write(aMessage, TInt(2), iHwBufPckgFill); + TInt err = MessageWrite(aMessage, TInt(2), iHwBufPckgFill); if ( (err == KErrNone) && (iHwBufPckgFill().iChunkOp == EOpen) ) { aMessage.Complete(iChunk); @@ -1410,7 +1412,7 @@ return EFalse; } - TInt err = MmfMessageUtil::Write(aMessage, TInt(2), iHwBufPckgEmpty); + TInt err = MessageWrite(aMessage, TInt(2), iHwBufPckgEmpty); if ( (err == KErrNone) && (iHwBufPckgEmpty().iChunkOp == EOpen) ) { aMessage.Complete(iChunk); @@ -1456,7 +1458,7 @@ aMessage.Complete(err); return EFalse; } - aMessage.WriteL(TInt(2),timePckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),timePckg)); return ETrue; } @@ -1465,7 +1467,7 @@ TBool isSupported = EFalse; TPckgBuf isSupportedPckg(isSupported); isSupportedPckg() = iAdapter->IsResumeSupported(); - aMessage.WriteL(TInt(2),isSupportedPckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),isSupportedPckg)); return ETrue; } @@ -1522,7 +1524,8 @@ // (other items were commented in a header). // CMMFDevSoundSession::CMMFDevSoundSession() : - iSetClientConfigApplied (EFalse) + iSetClientConfigApplied (EFalse), + iDisconnecting (EFalse) { } @@ -1640,6 +1643,8 @@ void CMMFDevSoundSession::Disconnect(const RMessage2& aMessage) { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::Disconnect - Enter")); + iDisconnecting = ETrue; + if (NeedToQueue()) { // if we are in the middle of something, enqueue and wait @@ -2106,7 +2111,7 @@ if (iRequestBeingServiced.Function()==EMMFDevSoundProxyStop) { // flush the queue - will have removed any stale items added between initial call and MMRC's reaction - iQueuedRequests.Reset(); + FlushQueuedRequests(); FlushEventQueue(); iChunk.Close(); } @@ -2116,7 +2121,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iCaps = iDevSoundCapabilities; TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - iRequestBeingServiced.Message().Write(TInt(2),pckg); + MessageWrite(iRequestBeingServiced.Message(),TInt(2),pckg); } if(iRequestBeingServiced.Function()==EMMFDevSoundProxyCancelInitialize) @@ -2541,11 +2546,11 @@ TBool CMMFDevSoundSession::DoRegisterAsClientL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg buf; - aMessage.ReadL(0,buf); + User::LeaveIfError(MessageRead(aMessage,0,buf)); HBufC8* notificationRegistrationData = NULL; notificationRegistrationData = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesLengthL(1))); TPtr8 dataPtr(notificationRegistrationData->Des()); - aMessage.ReadL(1,dataPtr); + User::LeaveIfError(MessageRead(aMessage,1,dataPtr)); DoSetClientConfigL();// added here instead of the CreateL() TInt err = KErrNone; err = iAdapter->RegisterAsClient(buf().iNotificationEventUid,dataPtr); @@ -2561,7 +2566,7 @@ TBool CMMFDevSoundSession::DoCancelRegisterAsClientL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg buf; - aMessage.ReadL(0,buf); + User::LeaveIfError(MessageRead(aMessage,0,buf)); TInt err = KErrNone; err = iAdapter->CancelRegisterAsClient(buf().iNotificationEventUid); if (err != KErrNone) @@ -2575,14 +2580,14 @@ TBool CMMFDevSoundSession::DoGetResourceNotificationDataL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg buf; - aMessage.ReadL(0,buf); + User::LeaveIfError(MessageRead(aMessage,0,buf)); HBufC8* notificationData = NULL; notificationData = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesMaxLengthL(2))); TPtr8 dataPtr(notificationData->Des()); - aMessage.ReadL(2,dataPtr); + User::LeaveIfError(MessageRead(aMessage,2,dataPtr)); TInt err = KErrNone; err = iAdapter->GetResourceNotificationData(buf().iNotificationEventUid,dataPtr); - aMessage.WriteL(2,*notificationData); + User::LeaveIfError(MessageWrite(aMessage,2,*notificationData)); CleanupStack::PopAndDestroy(1); // Notification data if (err != KErrNone) { @@ -2611,7 +2616,7 @@ if (aMessage.HasCapability(ECapabilityMultimediaDD) && aMessage.HasCapability(ECapabilityUserEnvironment)) { TPckgBuf threadId; - aMessage.ReadL(1, threadId); + User::LeaveIfError(MessageRead(aMessage, 1, threadId)); CMMFDevSoundServer* server = const_cast(static_cast(Server())); @@ -2640,6 +2645,46 @@ iAdapter->BufferErrorEvent(); } +void CMMFDevSoundSession::FlushQueuedRequests() + { + for (TInt queueIndex = (iQueuedRequests.Count() - 1); queueIndex >= 0; --queueIndex) + { + if ((iQueuedRequests[queueIndex].Type() == TMMFDevSoundRequest::ESessionEvents) && + (iQueuedRequests[queueIndex].Function() == RMessage2::EDisConnect)) + { + continue; + } + iQueuedRequests.Remove(queueIndex); + } + } + +TInt CMMFDevSoundSession::MessageRead(const RMmfIpcMessage& aMessage, TInt aParam, TDes8& aResult) + { + if (!iDisconnecting) + { + return MmfMessageUtil::Read(aMessage, aParam, aResult); + } + return KErrBadHandle; + } + +TInt CMMFDevSoundSession::MessageRead(const RMmfIpcMessage& aMessage, TInt aParam, TDes16& aResult) + { + if (!iDisconnecting) + { + return aMessage.Read(aParam, aResult); + } + return KErrBadHandle; + } + +TInt CMMFDevSoundSession::MessageWrite(const RMmfIpcMessage& aMessage, TInt aParam, const TDesC8& aValue) + { + if (!iDisconnecting) + { + return MmfMessageUtil::Write(aMessage, aParam, aValue); + } + return KErrBadHandle; + } + void CMMFDevSoundSession::ResetNotifiedError() // called at beginning of commit cycle, so any error will be from callbacks { diff -r e51ae4fd18e6 -r af86cc8a4692 devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.h --- a/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.h Wed Sep 15 13:51:05 2010 +0300 +++ b/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.h Wed Oct 13 16:15:10 2010 +0300 @@ -1534,6 +1534,22 @@ */ void BufferErrorEvent(); + /* + Removes all entries from iQueuedRequests except for + disconnect requests. + */ + void FlushQueuedRequests(); + + /* + Helper functions, used to guard against accessing the equivalent + functions on bad message handles during a disconnection. These + methods should be used whenever a Read or Write is made outside the + context of DoServiceRequestL(). + */ + TInt MessageRead(const RMmfIpcMessage& aMessage, TInt aParam, TDes8& aResult); + TInt MessageRead(const RMmfIpcMessage& aMessage, TInt aParam, TDes16& aResult); + TInt MessageWrite(const RMmfIpcMessage& aMessage, TInt aParam, const TDesC8& aValue); + protected: /** @@ -1614,6 +1630,7 @@ TInt iSeqNum; TBool iPreemptionClash; TInt iNotifiedError; + TBool iDisconnecting; }; diff -r e51ae4fd18e6 -r af86cc8a4692 devsound/a3fintegrationtest/scripts/tsi_a3f_devsound_pcm_play.script --- a/devsound/a3fintegrationtest/scripts/tsi_a3f_devsound_pcm_play.script Wed Sep 15 13:51:05 2010 +0300 +++ b/devsound/a3fintegrationtest/scripts/tsi_a3f_devsound_pcm_play.script Wed Oct 13 16:15:10 2010 +0300 @@ -334,10 +334,8 @@ //! @SYMTestActions 1. Configure DevSound to play PCM16 raw audio data in mono mode with sampling rate of 8 kHz. //! 2. Start playing and read recorded data from file. //! 3. Stop playback once EOF is reached. -//! 4. Initialize again -//! 5. Check that time played is 0 -//! 6. Restart playback again -//! 7. Stop test when EOF is reached again +//! 4. Restart playback again +//! 5. Stop test when EOF is reached again //! @SYMTestExpectedResults Devsound to successfully play PCM16 audio data in mono mode with sampling rate of 8 KHz twice with all the DevSound callback //! functions being executed as required throughout the test. diff -r e51ae4fd18e6 -r af86cc8a4692 devsound/a3fintegrationtest/src/tsi_a3f_devsound_play.cpp --- a/devsound/a3fintegrationtest/src/tsi_a3f_devsound_play.cpp Wed Sep 15 13:51:05 2010 +0300 +++ b/devsound/a3fintegrationtest/src/tsi_a3f_devsound_play.cpp Wed Oct 13 16:15:10 2010 +0300 @@ -2610,8 +2610,8 @@ ERR_PRINTF2(_L("Could not Open the File: Error = %d"), err); StopTest(err); } - iPlayState = EStatePlayStart; - Fsm(EEventPlayStart, KErrNone); + iPlayState = EStatePlayInitializing; + Fsm(EEventInitCompletePlay, KErrNone); } else { @@ -2626,50 +2626,6 @@ } -/* - * - * InitializeComplete - * - */ -void RStepA3FDevSoundPlayEOFPlayMultipleTimes::InitializeComplete(TInt aError) - { - INFO_PRINTF2(_L("Initialize returned with = %d"), aError); - if (aError == KErrNone) - { - TTimeIntervalMicroSeconds time; - TInt err = iMMFDevSound->GetTimePlayed(time); - if (err != KErrNone) - { - INFO_PRINTF2(_L("CMMFDevSound::GetTimePlayed unexpectedly returned %d - abort test"), err); - StopTest(err, EFail); - return; - } - - // checking low 32bits should be enough - sample played should never exceed 4000-ish seconds - INFO_PRINTF2(_L("Time played is %d after Play-Initialisation"), I64LOW(time.Int64())); - if (I64LOW(time.Int64()) != 0) - { - INFO_PRINTF1(_L("Time played is not 0 after Play-Initialisation - abort test")); - StopTest(KErrNone, EFail); - return; - } - - TInt samples = iMMFDevSound->SamplesPlayed(); - INFO_PRINTF2(_L("Sample played is %d after Play-Initialisation"), samples); - if (samples != 0) - { - INFO_PRINTF1(_L("Sample played is not 0 after Play-Initialisation - abort test")); - StopTest(KErrNone, EFail); - return; - } - - // This is to trigger iMMFDevSound->PlayInitL as next step in the base Fsm - iPlayState = EStatePlayInitializing; - Fsm(EEventInitCompletePlay, KErrNone); - } - } - - // // RStepA3FDevSoundInititalizeDuringInitialize // diff -r e51ae4fd18e6 -r af86cc8a4692 devsound/a3fintegrationtest/src/tsi_a3f_devsound_play.h --- a/devsound/a3fintegrationtest/src/tsi_a3f_devsound_play.h Wed Sep 15 13:51:05 2010 +0300 +++ b/devsound/a3fintegrationtest/src/tsi_a3f_devsound_play.h Wed Oct 13 16:15:10 2010 +0300 @@ -384,7 +384,6 @@ // From MDevSoundObserver virtual void PlayError(TInt aError); - virtual void InitializeComplete(TInt aError); private: TInt iRepeatCount; diff -r e51ae4fd18e6 -r af86cc8a4692 devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingManager/src/TelephonyAudioRoutingManager.cpp --- a/devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingManager/src/TelephonyAudioRoutingManager.cpp Wed Sep 15 13:51:05 2010 +0300 +++ b/devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingManager/src/TelephonyAudioRoutingManager.cpp Wed Oct 13 16:15:10 2010 +0300 @@ -31,12 +31,7 @@ const TInt KTelAudRtngServerStackSize=0x2000; // 8KB const TInt KTelAudRtngServerInitHeapSize=0x1000; // 4KB -#if defined __WINSCW__ -//Telephoney Audio routing server requires only 1MB data for emulator -const TInt KTelAudRtngServerMaxHeapSize=0x100000; // 1MB -#else const TInt KTelAudRtngServerMaxHeapSize=0x1000000; // 16MB -#endif // ================= MEMBER FUNCTIONS ======================= diff -r e51ae4fd18e6 -r af86cc8a4692 mm_pub/drm_audio_player_api/tsrc/data/mmc/drm/test3gp.dcf diff -r e51ae4fd18e6 -r af86cc8a4692 mm_pub/drm_audio_player_api/tsrc/data/mmc/drm/testmp3.dcf diff -r e51ae4fd18e6 -r af86cc8a4692 mmresourcemgmt/mmresctrl/src/mmrcserver/mmrcserver.cpp --- a/mmresourcemgmt/mmresctrl/src/mmrcserver/mmrcserver.cpp Wed Sep 15 13:51:05 2010 +0300 +++ b/mmresourcemgmt/mmresctrl/src/mmrcserver/mmrcserver.cpp Wed Oct 13 16:15:10 2010 +0300 @@ -224,17 +224,6 @@ // Need to check that the server exists. if ( findCountServer.Next(name) != KErrNone ) { -#if (defined (__WINS__) || defined (__WINSCW__) ) - // Create the thread for the server. Don't allocate a separate - // heap but use client thread's heap instead. This saves memory - // space in the single process model used in the emulator. - res = aServerThread.Create(KMMRCServerName, - CMMRCServer::ThreadFunction, - KMMRCServerStackSize, - NULL, - NULL - ); -#else // Create the thread for the server. res = aServerThread.Create(KMMRCServerName, CMMRCServer::ThreadFunction, @@ -243,7 +232,6 @@ KMMRCServerMaxHeapSize, NULL ); -#endif // The thread has been created OK so get it started - however // we need to make sure that it has started before we continue.