kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp
branchRCL_3
changeset 21 e7d2d738d3c2
parent 20 597aaf25e343
child 22 2f92ad2dc5db
--- a/kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp	Fri Mar 12 15:50:11 2010 +0200
+++ b/kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp	Mon Mar 15 12:45:50 2010 +0200
@@ -204,17 +204,18 @@
 
 void DReferenceCountedObject::Open()
 	{
-	__ASSERT_CRITICAL
-	TBool ok = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0);
-	__NK_ASSERT_ALWAYS(ok);
+	CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND, "DReferenceCountedObject::Open");
+	TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0);
+	if (orig <= 0)
+		__crash();
 	}
 
 
 TBool DReferenceCountedObject::TryOpen()
 	{
-	__ASSERT_CRITICAL
-	TBool ok = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0);
-	return ok;
+	CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND, "DReferenceCountedObject::Open");
+	TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0);
+	return (orig>0);
 	}
 
 
@@ -245,20 +246,23 @@
 
 void DReferenceCountedObject::Close()
 	{
-	__ASSERT_CRITICAL
 	__NK_ASSERT_DEBUG(CheckCloseIsSafe());
-	__NK_ASSERT_DEBUG(iReferenceCount>0);
-	if (__e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0) == 1)
+	TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0);
+	if (orig == 1)
 		delete this;
+	else if (orig <= 0)
+		__crash();
 	}
 
 
 void DReferenceCountedObject::AsyncClose()
 	{
-	__ASSERT_CRITICAL
-	__NK_ASSERT_DEBUG(iReferenceCount>0);
-	if (__e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0) == 1)
+	CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND, "DReferenceCountedObject::AsyncClose");
+	TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0);
+	if (orig == 1)
 		AsyncDelete();
+	else if (orig <= 0)
+		__crash();
 	}