kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp
branchRCL_3
changeset 80 597aaf25e343
parent 62 4a8fed1c0ef6
child 81 e7d2d738d3c2
equal deleted inserted replaced
62:4a8fed1c0ef6 80:597aaf25e343
   241 #endif
   241 #endif
   242 	return true;
   242 	return true;
   243 	}
   243 	}
   244 
   244 
   245 
   245 
   246 TBool DReferenceCountedObject::CheckAsyncCloseIsSafe()
       
   247 	{
       
   248 	__ASSERT_CRITICAL
       
   249 #ifdef _DEBUG
       
   250 	NFastMutex* fm = NKern::HeldFastMutex();
       
   251 	if(fm)
       
   252 		{
       
   253 		Kern::Printf("DReferenceCountedObject[0x%08x]::AsyncClose() fast mutex violation %M",this,fm);
       
   254 		return false;
       
   255 		}
       
   256 #endif
       
   257 	return true;
       
   258 	}
       
   259 
       
   260 
       
   261 void DReferenceCountedObject::Close()
   246 void DReferenceCountedObject::Close()
   262 	{
   247 	{
   263 	__ASSERT_CRITICAL
   248 	__ASSERT_CRITICAL
   264 	__NK_ASSERT_DEBUG(CheckCloseIsSafe());
   249 	__NK_ASSERT_DEBUG(CheckCloseIsSafe());
   265 	__NK_ASSERT_DEBUG(iReferenceCount>0);
   250 	__NK_ASSERT_DEBUG(iReferenceCount>0);
   269 
   254 
   270 
   255 
   271 void DReferenceCountedObject::AsyncClose()
   256 void DReferenceCountedObject::AsyncClose()
   272 	{
   257 	{
   273 	__ASSERT_CRITICAL
   258 	__ASSERT_CRITICAL
   274 	__NK_ASSERT_DEBUG(CheckAsyncCloseIsSafe());
       
   275 	__NK_ASSERT_DEBUG(iReferenceCount>0);
   259 	__NK_ASSERT_DEBUG(iReferenceCount>0);
   276 	if (__e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0) == 1)
   260 	if (__e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0) == 1)
   277 		AsyncDelete();
   261 		AsyncDelete();
   278 	}
   262 	}
   279 
   263