kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.cpp
changeset 259 57b9594f5772
parent 90 947f0dc9f7a8
child 257 3e88ff8f41d5
child 269 d57b86b1867a
--- a/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.cpp	Wed Aug 18 11:08:29 2010 +0300
+++ b/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.cpp	Thu Sep 02 21:54:16 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 <DStaticPowerResource> & 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