diff -r 1f58177f6740 -r 9894ed580e4a mmserv/sts/stsproxy/src/rstssession.cpp --- a/mmserv/sts/stsproxy/src/rstssession.cpp Thu Aug 12 20:27:32 2010 -0500 +++ b/mmserv/sts/stsproxy/src/rstssession.cpp Tue Aug 24 03:16:41 2010 -0500 @@ -16,6 +16,7 @@ * to the STS Server. */ +// Include Files #include "rstssession.h" #include "stsclientservercommon.h" @@ -96,6 +97,7 @@ void RStsSession::HandleMessage(TStsCallBack& aMessage) { + bool signalObserver = false; TStsCallBackType type = aMessage.callBackType; if (type == EStsPlayAlarmComplete) { @@ -104,7 +106,7 @@ iObserverMutex.Wait(); if (observer == iObserverMap[context]) { - observer->PlayAlarmComplete(aMessage.alarmContext); + signalObserver = true; } else { @@ -112,6 +114,10 @@ } iObserverMap.erase(context); iObserverMutex.Signal(); + if (signalObserver) + { + observer->PlayAlarmComplete(aMessage.alarmContext); + } } else if (type == EStsShutdown) { @@ -165,7 +171,6 @@ { TInt result = iThread.Create(KNullDesC, RStsSession::CallBackThreadMain, KDefaultStackSize, &User::Heap(), (TAny*) this); - if (result == KErrNone) { TRequestStatus rendezvousStatus = KRequestPending; @@ -186,7 +191,6 @@ iThread.Kill(result); } } - return result; } @@ -208,14 +212,12 @@ KStsServerBuild), KNumSlots, EIpcSession_Sharable); } } - if (result == KErrNone) { TPckg idPckg(iServerThreadId); result = SendReceive(StsMsg_RegisterMsgQueue, TIpcArgs(iMsgQueue, &idPckg)); } - return result; } @@ -239,7 +241,6 @@ } } } - return result; } @@ -267,19 +268,56 @@ void RStsSession::SendPlayAlarm(CSystemToneService::TAlarmType aAlarm, unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) { + bool signalObserver = false; TPckg alarmContextPckg(aAlarmContext); + // Need to do the SendReceive and adding the observer to the + // observer map in a critical section in case the playback + // completes before this method has a chance to update the + // observer list. + iObserverMutex.Wait(); TInt err = SendReceive(StsMsg_PlayAlarm, TIpcArgs(aAlarm, &alarmContextPckg, &aObserver)); if (err != KErrNone) { //TODO: Log a message - aObserver.PlayAlarmComplete(aAlarmContext); + signalObserver = true; } else { - iObserverMutex.Wait(); iObserverMap[aAlarmContext] = &aObserver; - iObserverMutex.Signal(); + } + iObserverMutex.Signal(); + if (signalObserver) + { + aObserver.PlayAlarmComplete(aAlarmContext); + } + } + +void RStsSession::SendPlayToneAlarm(CSystemToneService::TToneType aTone, + unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) + { + bool signalObserver = false; + TPckg alarmContextPckg(aAlarmContext); + // Need to do the SendReceive and adding the observer to the + // observer map in a critical section in case the playback + // completes before this method has a chance to update the + // observer list. + iObserverMutex.Wait(); + TInt err = SendReceive(StsMsg_PlayToneAlarm, TIpcArgs(aTone, + &alarmContextPckg, &aObserver)); + if (err != KErrNone) + { + //TODO: Log a message + signalObserver = true; + } + else + { + iObserverMap[aAlarmContext] = &aObserver; + } + iObserverMutex.Signal(); + if (signalObserver) + { + aObserver.PlayAlarmComplete(aAlarmContext); } } @@ -295,26 +333,6 @@ } } -void RStsSession::SendPlayToneForStop(CSystemToneService::TToneType aTone, - unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) - { - TPckg alarmContextPckg(aAlarmContext); - TInt err = SendReceive(StsMsg_PlayTone, TIpcArgs(aTone, - &alarmContextPckg, &aObserver)); - if (err != KErrNone) - { - //TODO: Log a message - aObserver.PlayAlarmComplete(aAlarmContext); - } - else - { - iObserverMutex.Wait(); - iObserverMap[aAlarmContext] = &aObserver; - iObserverMutex.Signal(); - } - } - - void RStsSession::CleanUpObservers() { iObserverMutex.Wait();