--- 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 <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