diff -r 4e1aa6a622a0 -r e978f818f9bd sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h --- a/sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h Tue Feb 02 00:53:00 2010 +0200 +++ b/sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h Fri Mar 19 09:58:42 2010 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -37,12 +37,11 @@ @internalComponent */ - - +class CEmergencyAdaptationMessage; class CEmergencyCallRfAdaptation : public CActive { public: - static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation& aAdaptation); + static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation* aAdaptation); ~CEmergencyCallRfAdaptation(); void Release(); @@ -52,38 +51,71 @@ void SetPriorityClientSession(CSsmAdaptationSession* aPriorityClientSession); void RemovePriorityClientSession(); void ReserveMemoryL(); + void DeleteAdaptationMessage(); + void NotifyAndRemoveAll(); + void Dequeue(CEmergencyAdaptationMessage *&aCurrentMessage); protected: void RunL(); TInt RunError( TInt aError ); void DoCancel(); + void ConstructL(MEmergencyCallRfAdaptation* aAdaptation); private: - CEmergencyCallRfAdaptation(MEmergencyCallRfAdaptation& aAdaptation); + CEmergencyCallRfAdaptation(); void SubmitOrQueueL(const RMessage2 &aMessage); - void Submit(CAdaptationMessage*& aMessage); + void Submit(CEmergencyAdaptationMessage*& aMessage); private: - CAdaptationMessage *iCurrentMessage; - RSsmAdaptationRequestQueue iPendingRequestsQueue; + CEmergencyAdaptationMessage *iCurrentMessage; + RPointerArrayiPendingEmergencyRequestsQueue; - MEmergencyCallRfAdaptation& iEmergencyCallRfAdaptation; - //Reserving Heap to create CAdaptationMessage in OOM condition for priority clients - RHeap* iReservedHeap; + MEmergencyCallRfAdaptation* iEmergencyCallRfAdaptation; //For storing PriorityClientsession CSsmAdaptationSession* iPriorityClientSession; + + //Count of unused reserved pointers. + TInt iReserveMsgCount; + //Pointer Array to store reserved adaptation message pointers + RPointerArray iAdaptationReservedMessageArray; }; +enum TMessageStatus + { + EMsgStatusNULL = 0, //Default status of Message is 0 + EMsgReserved = 1, //Flag to indicate the message is using Reserved memory. + EMsgInUse = 2 //Flag to indicate the Reserved message is Used. + }; /** - * Used for pushing the CAdaptationMessage object in to cleanup stack. This is needed as - * the message is created using the reserved heap should be freed back to reserved heap - * instead of deleting. - * @internalComponent + * Class to hold CAdaptationMessage pointer and the value to know whether the current message is from reserved pool + * or normal message. */ -struct TStoreAdaptationMessage +class CEmergencyAdaptationMessage : public CBase { +public: + static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage); + static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage, const TInt8 aMessageStatus); + + ~CEmergencyAdaptationMessage(); + + inline void UnsetMessageStatus(const TInt8 aMessageStatus); + inline void SetMessageStatus(const TInt8 aMessageStatus); + inline TBool IsMessageReserved() const; + inline TBool IsMessageInuse() const; + void SetMessage(const RMessage2& aMessage); + TInt Function() const; + CSession2 *Session() const; + void Complete(TInt aReason); + +protected: + void ConstructL(const RMessage2& aMessage); + +private: + CEmergencyAdaptationMessage(const TInt8 aMessageStatus); + +private: CAdaptationMessage* iAdaptationMessage; - RHeap* iReservedHeap; + // To know the Adaptation Message status. + TInt8 iMessageStatus; }; - #endif // __SUSEMERGENCYCALLRFADAPTATION_H__