X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5c19dc3ae3bd8e40a9c028b0deddd50ff337692c..ee5f17c73ddf6cea151be3383378b7972c71f538:/OSX/libsecurity_utilities/lib/seccfobject.cpp diff --git a/OSX/libsecurity_utilities/lib/seccfobject.cpp b/OSX/libsecurity_utilities/lib/seccfobject.cpp index 142a2730..93185ffc 100644 --- a/OSX/libsecurity_utilities/lib/seccfobject.cpp +++ b/OSX/libsecurity_utilities/lib/seccfobject.cpp @@ -25,10 +25,13 @@ #include #include #include +#include #include #include -#include +#if( __cplusplus <= 201103L) +#include +#endif SecPointerBase::SecPointerBase(const SecPointerBase& p) { @@ -40,20 +43,6 @@ SecPointerBase::SecPointerBase(const SecPointerBase& p) } - - -static void CheckForRelease(SecCFObject* ptr) -{ - CFTypeRef tr = ptr->operator CFTypeRef(); - CFIndex retainCount = CFGetRetainCount(tr); - if (retainCount == 1 || retainCount == -1) - { - ptr->aboutToDestruct(); - } -} - - - SecPointerBase::SecPointerBase(SecCFObject *p) { if (p && !p->isNew()) @@ -69,7 +58,6 @@ SecPointerBase::~SecPointerBase() { if (ptr) { - CheckForRelease(ptr); CFRelease(ptr->operator CFTypeRef()); } } @@ -85,7 +73,6 @@ SecPointerBase& SecPointerBase::operator = (const SecPointerBase& p) } if (ptr) { - CheckForRelease(ptr); CFRelease(ptr->operator CFTypeRef()); } ptr = p.ptr; @@ -102,7 +89,6 @@ void SecPointerBase::assign(SecCFObject * p) } if (ptr) { - CheckForRelease(ptr); CFRelease(ptr->operator CFTypeRef()); } ptr = p; @@ -114,7 +100,6 @@ void SecPointerBase::copy(SecCFObject * p) { if (ptr) { - CheckForRelease(ptr); CFRelease(ptr->operator CFTypeRef()); } @@ -153,14 +138,10 @@ SecCFObject::allocate(size_t size, const CFClass &cfclass) throw(std::bad_alloc) if (p == NULL) throw std::bad_alloc(); - ((SecRuntimeBase*) p)->isNew = true; + atomic_flag_clear(&((SecRuntimeBase*) p)->isOld); void *q = ((u_int8_t*) p) + kAlignedRuntimeSize; - if (SECURITY_DEBUG_SEC_CREATE_ENABLED()) { - const CFRuntimeClass *rtc = _CFRuntimeGetClassWithTypeID(cfclass.typeID); - SECURITY_DEBUG_SEC_CREATE(q, rtc ? (char *)rtc->className : NULL, (unsigned int)cfclass.typeID); - } return q; } @@ -168,11 +149,7 @@ void SecCFObject::operator delete(void *object) throw() { CFTypeRef cfType = reinterpret_cast(reinterpret_cast(object) - kAlignedRuntimeSize); - if (CF_IS_COLLECTABLE(cfType)) - { - return; - } - + CFAllocatorRef allocator = CFGetAllocator(cfType); CFAllocatorDeallocate(allocator, (void*) cfType); } @@ -180,12 +157,12 @@ SecCFObject::operator delete(void *object) throw() SecCFObject::SecCFObject() { mRetainCount = 1; - mRetainSpinLock = OS_SPINLOCK_INIT; + mRetainLock = OS_UNFAIR_LOCK_INIT; } uint32_t SecCFObject::updateRetainCount(intptr_t direction, uint32_t *oldCount) { - OSSpinLockLock(&mRetainSpinLock); + os_unfair_lock_lock(&mRetainLock); if (oldCount != NULL) { @@ -203,7 +180,7 @@ uint32_t SecCFObject::updateRetainCount(intptr_t direction, uint32_t *oldCount) uint32_t result = mRetainCount; - OSSpinLockUnlock(&mRetainSpinLock); + os_unfair_lock_unlock(&mRetainLock); return result; } @@ -212,7 +189,7 @@ uint32_t SecCFObject::updateRetainCount(intptr_t direction, uint32_t *oldCount) SecCFObject::~SecCFObject() { - SECURITY_DEBUG_SEC_DESTROY(this); + //SECURITY_DEBUG_SEC_DESTROY(this); } bool @@ -257,7 +234,7 @@ SecCFObject::aboutToDestruct() Mutex* -SecCFObject::getMutexForObject() +SecCFObject::getMutexForObject() const { return NULL; // we only worry about descendants of KeychainImpl and ItemImpl }