diff -r 2d65c2f76d7b -r 947f0dc9f7a8 kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp --- a/kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp Tue Feb 02 01:24:03 2010 +0200 +++ b/kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp Fri Apr 16 16:24:37 2010 +0300 @@ -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); } @@ -243,38 +244,25 @@ } -TBool DReferenceCountedObject::CheckAsyncCloseIsSafe() - { - __ASSERT_CRITICAL -#ifdef _DEBUG - NFastMutex* fm = NKern::HeldFastMutex(); - if(fm) - { - Kern::Printf("DReferenceCountedObject[0x%08x]::AsyncClose() fast mutex violation %M",this,fm); - return false; - } -#endif - return true; - } - - 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(CheckAsyncCloseIsSafe()); - __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(); } @@ -905,9 +893,6 @@ // initialise address spaces... DAddressSpace::Init2(); - // init pager... - ThePager.Init2(); - TheMmu.Init2Final(); }