kerneltest/e32test/defrag/d_ramdefrag.cpp
branchRCL_3
changeset 43 c1f20ce4abcf
parent 0 a41df078684a
child 44 3e88ff8f41d5
--- a/kerneltest/e32test/defrag/d_ramdefrag.cpp	Thu Aug 19 11:14:22 2010 +0300
+++ b/kerneltest/e32test/defrag/d_ramdefrag.cpp	Tue Aug 31 16:34:26 2010 +0300
@@ -72,6 +72,7 @@
 	TInt ZoneAllocToMany2(TInt aZoneIndex, TInt aNumPages);
 	TInt AllocContiguous(TUint aNumBytes);
 	TInt FreeZone(TInt aNumPages);
+	TInt FreeZoneId(TUint aZoneId);
 	TInt FreeFromAllZones();
 	TInt FreeFromAddr(TInt aNumPages, TUint32 aAddr);
 	TInt PageCount(TUint aId, STestUserSidePageCount* aPageData);
@@ -389,6 +390,10 @@
 			retVal = DRamDefragFuncTestChannel::FreeZone((TInt)a1);
 			break;
 
+		case RRamDefragFuncTestLdd::EFreeZoneId:
+			retVal = DRamDefragFuncTestChannel::FreeZoneId((TUint)a1);
+			break;
+
 		case RRamDefragFuncTestLdd::EFreeFromAllZones:
 			retVal = DRamDefragFuncTestChannel::FreeFromAllZones();	
 			break;
@@ -1512,6 +1517,30 @@
 	}
 
 //
+// FreeZoneId
+//
+// Call Epoc::FreeRamZone()
+//
+TInt DRamDefragFuncTestChannel::FreeZoneId(TUint aZoneId)
+	{
+	NKern::ThreadEnterCS();
+	
+	TInt r = Epoc::FreeRamZone(aZoneId);
+	if (r == KErrNone)
+		{
+		if (iContigAddr == KPhysAddrInvalid)
+			{
+			Kern::Printf("Error some how freed a RAM zone that wasn't previously claimed");
+			NKern::ThreadLeaveCS();
+			return KErrGeneral;
+			}
+		iContigAddr = KPhysAddrInvalid;
+		}
+	NKern::ThreadLeaveCS();
+	return r;
+	}
+
+//
 // FreeFromAllZones
 //
 // Call the overloaded Epoc::FreePhysicalRam function