equal
deleted
inserted
replaced
202 } |
202 } |
203 |
203 |
204 |
204 |
205 void DReferenceCountedObject::Open() |
205 void DReferenceCountedObject::Open() |
206 { |
206 { |
207 __ASSERT_CRITICAL |
207 CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND, "DReferenceCountedObject::Open"); |
208 TBool ok = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0); |
208 TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0); |
209 __NK_ASSERT_ALWAYS(ok); |
209 if (orig <= 0) |
|
210 __crash(); |
210 } |
211 } |
211 |
212 |
212 |
213 |
213 TBool DReferenceCountedObject::TryOpen() |
214 TBool DReferenceCountedObject::TryOpen() |
214 { |
215 { |
215 __ASSERT_CRITICAL |
216 CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND, "DReferenceCountedObject::Open"); |
216 TBool ok = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0); |
217 TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, 1, 0); |
217 return ok; |
218 return (orig>0); |
218 } |
219 } |
219 |
220 |
220 |
221 |
221 TBool DReferenceCountedObject::CheckCloseIsSafe() |
222 TBool DReferenceCountedObject::CheckCloseIsSafe() |
222 { |
223 { |
243 } |
244 } |
244 |
245 |
245 |
246 |
246 void DReferenceCountedObject::Close() |
247 void DReferenceCountedObject::Close() |
247 { |
248 { |
248 __ASSERT_CRITICAL |
|
249 __NK_ASSERT_DEBUG(CheckCloseIsSafe()); |
249 __NK_ASSERT_DEBUG(CheckCloseIsSafe()); |
250 __NK_ASSERT_DEBUG(iReferenceCount>0); |
250 TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0); |
251 if (__e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0) == 1) |
251 if (orig == 1) |
252 delete this; |
252 delete this; |
|
253 else if (orig <= 0) |
|
254 __crash(); |
253 } |
255 } |
254 |
256 |
255 |
257 |
256 void DReferenceCountedObject::AsyncClose() |
258 void DReferenceCountedObject::AsyncClose() |
257 { |
259 { |
258 __ASSERT_CRITICAL |
260 CHECK_PRECONDITIONS(MASK_NO_KILL_OR_SUSPEND, "DReferenceCountedObject::AsyncClose"); |
259 __NK_ASSERT_DEBUG(iReferenceCount>0); |
261 TInt orig = __e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0); |
260 if (__e32_atomic_tas_ord32(&iReferenceCount, 1, -1, 0) == 1) |
262 if (orig == 1) |
261 AsyncDelete(); |
263 AsyncDelete(); |
|
264 else if (orig <= 0) |
|
265 __crash(); |
262 } |
266 } |
263 |
267 |
264 |
268 |
265 // |
269 // |
266 // Memory object functions |
270 // Memory object functions |