OSMetaClass::~OSMetaClass() { do { OSCollectionIterator *iter; if (sAllClassesDict) sAllClassesDict->removeObject(className); iter = OSCollectionIterator::withCollection(sKModClassesDict); if (!iter) break; OSSymbol *iterKey; while ( (iterKey = (OSSymbol *) iter->getNextObject()) ) { OSSet *kmodClassSet; kmodClassSet = (OSSet *) sKModClassesDict->getObject(iterKey); if (kmodClassSet && kmodClassSet->containsObject(this)) { kmodClassSet->removeObject(this); break; } } iter->release(); } while (false); if (sStalled) { unsigned int i; // First pass find class in stalled list for (i = 0; i < sStalled->count; i++) if (this == sStalled->classes[i]) break; if (i < sStalled->count) { sStalled->count--; if (i < sStalled->count) memmove(&sStalled->classes[i], &sStalled->classes[i+1], (sStalled->count - i) * sizeof(OSMetaClass *)); } return; } }
bool IOPlatformExpert::configure( IOService * provider ) { OSSet * topLevel; OSDictionary * dict; IOService * nub; topLevel = OSDynamicCast( OSSet, getProperty("top-level")); if( topLevel) { while( (dict = OSDynamicCast( OSDictionary, topLevel->getAnyObject()))) { dict->retain(); topLevel->removeObject( dict ); nub = createNub( dict ); if( 0 == nub) continue; dict->release(); nub->attach( this ); nub->registerService(); } } return( true ); }