static _CFPFactoryRef _CFPFactoryCommonCreate(CFAllocatorRef allocator, CFUUIDRef factoryID) { _CFPFactoryRef factory; uint32_t size; size = sizeof(struct __CFPFactory) - sizeof(CFRuntimeBase); factory = (_CFPFactoryRef)_CFRuntimeCreateInstance(allocator, _CFPFactoryGetTypeID(), size, NULL); if (!factory) return NULL; factory->_uuid = (CFUUIDRef)CFRetain(factoryID); factory->_enabled = true; factory->_types = CFArrayCreateMutable(allocator, 0, &kCFTypeArrayCallBacks); factory->_lock = CFSpinLockInit; // WARNING: grab global lock before this lock _CFPFactoryAddToTable(factory); return factory; }
static _CFPFactory *_CFPFactoryCommonCreate(CFAllocatorRef allocator, CFUUIDRef factoryID) { _CFPFactory *factory; UInt32 size; size = sizeof(_CFPFactory); allocator = (allocator ? (CFAllocatorRef)CFRetain(allocator) : (CFAllocatorRef)CFRetain(__CFGetDefaultAllocator())); factory = (_CFPFactory *)CFAllocatorAllocate(allocator, size, 0); if (!factory) { CFRelease(allocator); return NULL; } factory->_allocator = allocator; factory->_uuid = (CFUUIDRef)CFRetain(factoryID); factory->_enabled = true; factory->_instanceCount = 0; _CFPFactoryAddToTable(factory); factory->_types = CFArrayCreateMutable(allocator, 0, &kCFTypeArrayCallBacks); return factory; }