kerneltest/e32test/resourceman/d_rescontrolcli.cpp
branchRCL_3
changeset 256 c1f20ce4abcf
parent 31 56f325a607ea
child 257 3e88ff8f41d5
--- a/kerneltest/e32test/resourceman/d_rescontrolcli.cpp	Thu Aug 19 11:14:22 2010 +0300
+++ b/kerneltest/e32test/resourceman/d_rescontrolcli.cpp	Tue Aug 31 16:34:26 2010 +0300
@@ -283,12 +283,6 @@
 	{
 	if(iDfcQ)
 	  iDfcQ->Destroy();
-	if(iStaticRes)
-		delete iStaticRes;
-	if(iStaticResArray[0])
-		delete iStaticResArray[0];
-	if(iStaticResArray[2])
-		delete iStaticResArray[2];
 	}
 
 /** Entry point for this driver */
@@ -319,7 +313,7 @@
 		return NULL;
 		}
 	//Allocating memory earlier so that during failure conditions can cleanup easily
-	p->iStaticRes = new DLaterRegisterStaticResource();
+	p->iStaticRes = new DLaterRegisterStaticResource(); // it will be registered, and later destroyed by the ResourceManager
 	if(!p->iStaticRes)
 		{
 		delete p->iClient.pName;
@@ -327,7 +321,7 @@
 		p->AsyncDelete();
 		return NULL;
 		}
-	p->iStaticResArray[0] = new DLaterRegisterStaticResource1();
+	p->iStaticResArray[0] = new DLaterRegisterStaticResource1(); // it will be registered, and later destroyed by the ResourceManager
 	if(!p->iStaticResArray[0])
 		{
 		delete p->iStaticRes;
@@ -412,13 +406,6 @@
 	{
    	if (iOpenChannels != 0) //A Channel is already open
 		return KErrInUse;
-	//Deregister the client registered in ldd init. 
-	TInt r = PowerResourceManager::DeRegisterClient(DTestResManLddFactory::iClient.iClientId);
-	if(r != KErrNone)
-		Kern::Fault("PRM CLIENT DEREGISTER FAILED", __LINE__);
-	delete DTestResManLddFactory::iClient.pName;
-	DTestResManLddFactory::iClient.pName = NULL;
-	DTestResManLddFactory::iClient.iClientId = 0;
 	aChannel = new DTestResManLdd;
 	if(!aChannel)
 		return KErrNoMemory;
@@ -514,7 +501,17 @@
 		}
 	}
 
-
+/** 
+	Function used for polling the PostBoot Notification status. 
+*/
+TBool PollingPostBootStatus(TAny* aLddFactory)
+	{
+	if(aLddFactory)
+		if(((DTestResManLddFactory *)aLddFactory)->iPostBootNotiCount == EXPECTED_POST_NOTI_COUNT)
+			return ETrue;
+	return EFalse;
+	}
+	
 /**
   Process synchronous 'control' requests
 */
@@ -990,12 +987,9 @@
 			}
 		case RTestResMan::ECheckPostBootLevelNotifications:
 			{
-				if(DTestResManLddFactory::iPostBootNotiCount != EXPECTED_POST_NOTI_COUNT)
-				{
-				r = KErrUnderflow;
-				break;
-				}
-			r = KErrNone;
+			//aPollPeriodMs = 3ms (3rd argument)
+			//aMaxPoll = 1000 (in total ~3000 ms timeout)
+			r = Kern::PollingWait(PollingPostBootStatus, (TAny*)iDevice, 3, 1000);
 			break;
 			}
 		case RTestResMan::EGetControllerVersion:
@@ -1335,6 +1329,17 @@
 	iPostBootNotiCount++;
 	DPowerResourceNotification *ptr = (DPowerResourceNotification*)aParam;
 	TInt r = PowerResourceManager::CancelNotification(iClient.iClientId, aResId, *ptr);
-	if(r == KErrNone)
-		delete ptr;
+	if(r == KErrCancel)
+		{
+		ptr->AsyncDelete();
+		if(iPostBootNotiCount == EXPECTED_POST_NOTI_COUNT)
+			{
+			r = PowerResourceManager::DeRegisterClient(DTestResManLddFactory::iClient.iClientId);
+			if(r != KErrNone)
+				Kern::Fault("PRM CLIENT DEREGISTER FAILED", __LINE__);
+			delete DTestResManLddFactory::iClient.pName;
+			DTestResManLddFactory::iClient.pName = NULL;
+			DTestResManLddFactory::iClient.iClientId = 0;
+			}
+		}
 	}