diff -r a179b74831c9 -r c1f20ce4abcf kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.cpp --- a/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.cpp Thu Aug 19 11:14:22 2010 +0300 +++ b/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.cpp Tue Aug 31 16:34:26 2010 +0300 @@ -49,7 +49,8 @@ } /** Constructor for simulated resource controller. */ -DSimulatedPowerResourceController::DSimulatedPowerResourceController():DPowerResourceController(),iStaticResourceCount(0), iEventDfc(EventDfcFunc, this) +DSimulatedPowerResourceController::DSimulatedPowerResourceController() + : iEventDfc(EventDfcFunc, this) { Kern::Printf(">DSimulatedPowerResourceController"); } @@ -57,26 +58,51 @@ /** Destructor for simulated resource controller. */ DSimulatedPowerResourceController::~DSimulatedPowerResourceController() { - Kern::Printf("DSimulatedPowerResourceController::~DSimulatedPowerResourceController()\n"); + Kern::Printf(">~DSimulatedPowerResourceController()\n"); ((TDynamicDfcQue*)iDfcQ)->Destroy(); - DStaticPowerResource *pR; - TUint c; - for(c = 0; c < iStaticResourceCount; c++) + delete iMsgQ; + + SPowerResourceClientLevel *pCL = iClientLevelPool; + while(iClientLevelPool) //Find the starting position of array to delete { - pR = iResources[c]; - delete pR; + if(iClientLevelPool < pCL) + pCL = iClientLevelPool; + iClientLevelPool = iClientLevelPool->iNextInList; + } + + delete [] pCL; + SPowerRequest *pReq = iRequestPool; + while(iRequestPool) //Find the starting position of array to delete + { + if(iRequestPool < pReq) + pReq = iRequestPool; + iRequestPool = iRequestPool->iNext; } - delete []iResources; + delete [] pReq; + #ifdef PRM_ENABLE_EXTENDED_VERSION - DStaticPowerResourceD* pDR; - - delete []iNodeArray; //Delete dependency nodes - for(c = 0; c < iStaticResDependencyCount; c++) + pCL = iResourceLevelPool; + while(iResourceLevelPool) { - pDR = iDependencyResources[c]; - delete pDR; + if(iResourceLevelPool < pCL) + pCL = iResourceLevelPool; + iResourceLevelPool = iResourceLevelPool->iNextInList; } - delete []iDependencyResources; + //delete resource pool + delete [] pCL; + delete iMsgQDependency; +#endif + + iClientList.Delete(); + iUserSideClientList.Delete(); + iStaticResourceArray.ResetAndDestroy(); + +#ifdef PRM_ENABLE_EXTENDED_VERSION + iCleanList.ResetAndDestroy(); + iDynamicResourceList.Delete(); + iDynamicResDependencyList.Delete(); + delete [] iNodeArray; //Delete dependency nodes + iStaticResDependencyArray.ResetAndDestroy(); #endif } @@ -274,147 +300,133 @@ } //This registers all static resource with resource controller. This function is called by PIL -TInt DSimulatedPowerResourceController::DoRegisterStaticResources(DStaticPowerResource**& aStaticResourceArray, TUint16& aStaticResourceCount) +TInt DSimulatedPowerResourceController::DoRegisterStaticResources(RPointerArray & aStaticResourceArray) { Kern::Printf(">DSimulatedPowerResourceController::DoRegisterStaticResources"); - aStaticResourceArray = (DStaticPowerResource**)new(DStaticPowerResource*[MAX_RESOURCE_COUNT]); - if(!aStaticResourceArray) - return KErrNoMemory; - DStaticPowerResource* pR = NULL; + + TBool error_occured = EFalse; + TInt r = KErrNone; //Create Binary Single Instantaneous Positive Resource - pR = new DBSIGISPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + DStaticPowerResource* pR = new DBSIGISPResource(); + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Multilevel Single Instantaneous Positive Resource pR = new DMLSIGISPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Binary Single Instantaneous Negative Resource pR = new DBSIGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Multilevel Single Instantaneous Negative Resource pR = new DMLSIGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Binary Single Longlatency Positive Resource + //Create Binary Single Long latency Positive Resource pR = new DBSLGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Multilevel Single Longlatency Positive Resource + //Create Multilevel Single Long latency Positive Resource pR = new DMLSLGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Binary Single Longlatency Get & Instantaneous Set Negative Resource + //Create Binary Single Long latency Get & Instantaneous Set Negative Resource pR = new DBSLGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Multilevel Single Longlatency Get & Instantaneous Set Negative Resource + //Create Multilevel Single Long latency Get & Instantaneous Set Negative Resource pR = new DMLSLGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Binary Single Instantaneous Get & Longlatency Set Positive Resource + //Create Binary Single Instantaneous Get & Long latency Set Positive Resource pR = new DBSIGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Multilevel Single Instantaneous Get & Longlatency Set Positive Resource + //Create Multilevel Single Instantaneous Get & Long latency Set Positive Resource pR = new DMLSIGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Binary SHared Instantaneous Positive Resource pR = new DBSHIGISPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Multilevel SHared Instantaneous Positive Resource pR = new DMLSHIGISPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Binary SHared Instantaneous Negative Resource pR = new DBSHIGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create Multilevel SHared Instantaneous Negative Resource pR = new DMLSHIGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Binary SHared Longlatency Positive Resource + //Create Binary SHared Long latency Positive Resource pR = new DBSHLGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Multilevel SHared Longlatency Positive Resource + //Create Multilevel SHared Long latency Positive Resource pR = new DMLSHLGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Binary SHared Longlatency Get & Instantaneous Set Negative Resource + //Create Binary SHared Long latency Get & Instantaneous Set Negative Resource pR = new DBSHLGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Multilevel SHared Longlatency Get & Instantaneous Set Negative Resource + //Create Multilevel SHared Long latency Get & Instantaneous Set Negative Resource pR = new DMLSHLGISNResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; //Create holes in resource array - aStaticResourceArray[iStaticResourceCount++] = NULL; - aStaticResourceArray[iStaticResourceCount++] = NULL; - //Create Binary SHared Instantaneous Get & Longlatency Set Positive Resource + if(aStaticResourceArray.Append(NULL) != KErrNone) + error_occured = ETrue; + + if(aStaticResourceArray.Append(NULL) != KErrNone) + error_occured = ETrue; + + //Create Binary SHared Instantaneous Get & Long latency Set Positive Resource pR = new DBSHIGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - //Create Multilevel SHared Instantaneous Get & Longlatency Set Positive Resource + //Create Multilevel SHared Instantaneous Get & Long latency Set Positive Resource pR = new DMLSHIGLSPResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; - - //Create Binary shared Longlatency get and set Custom Resource + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; + + //Create Binary shared Long latency get and set Custom Resource pR = new DBSHLGLSCResource(); - if(!pR) - CLEAN_AND_RETURN(iStaticResourceCount, aStaticResourceArray, KErrNoMemory) - aStaticResourceArray[iStaticResourceCount++] = pR; + if(!SafeAppend(aStaticResourceArray, pR)) + error_occured = ETrue; - iResources = aStaticResourceArray; - - aStaticResourceCount = iStaticResourceCount; - return KErrNone; + // the only error that could occur here is KErrNoMemory + // clean-up if the error did occur + if(error_occured) + { + aStaticResourceArray.ResetAndDestroy(); + r = KErrNoMemory; + } + return r; } //Constructors of all resources