kerneltest/e32test/defrag/d_ramdefrag.cpp
changeset 189 a5496987b1da
parent 0 a41df078684a
child 257 3e88ff8f41d5
--- a/kerneltest/e32test/defrag/d_ramdefrag.cpp	Wed Jun 23 12:58:21 2010 +0100
+++ b/kerneltest/e32test/defrag/d_ramdefrag.cpp	Thu Jul 01 17:57:33 2010 +0100
@@ -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