예제 #1
0
__private_extern__ void _CFPFactoryRemoveInstance(_CFPFactoryRef factory) {
    __CFSpinLock(&factory->_lock);
    CFPlugInRef plugin = factory->_plugIn;
    if (plugin) CFRetain(plugin);
    __CFSpinUnlock(&factory->_lock);
    if (plugin) {
        _CFPlugInRemovePlugInInstance(factory->_plugIn);
        CFRelease(plugin);
    }
    CFRelease(factory);
}
__private_extern__ void _CFPFactoryRemoveInstance(_CFPFactory *factory) {
    /* MF:!!! Assert that _instanceCount > 0. */
    factory->_instanceCount--;
    if (factory->_plugIn) _CFPlugInRemovePlugInInstance(factory->_plugIn);
    if (factory->_instanceCount == 0 && !factory->_enabled) _CFPFactoryDeallocate(factory);
}