diff -r 597aaf25e343 -r e7d2d738d3c2 kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp --- 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(); }