Loading...
--- xnu/xnu-4570.41.2/libkern/c++/OSMetaClass.cpp
+++ xnu/xnu-3248.30.4/libkern/c++/OSMetaClass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2006 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
@@ -110,7 +110,6 @@
struct ExpansionData {
OSOrderedSet * instances;
OSKext * kext;
- uint32_t retain;
#if IOTRACKING
IOTrackingQueue * tracking;
#endif
@@ -393,19 +392,7 @@
reserved = IONew(ExpansionData, 1);
bzero(reserved, sizeof(ExpansionData));
#if IOTRACKING
- uint32_t numSiteQs = 0;
- if ((this == &OSSymbol ::gMetaClass)
- || (this == &OSString ::gMetaClass)
- || (this == &OSNumber ::gMetaClass)
- || (this == &OSString ::gMetaClass)
- || (this == &OSData ::gMetaClass)
- || (this == &OSDictionary::gMetaClass)
- || (this == &OSArray ::gMetaClass)
- || (this == &OSSet ::gMetaClass)) numSiteQs = 27;
-
- reserved->tracking = IOTrackingQueueAlloc(inClassName, (uintptr_t) this,
- inClassSize, 0, kIOTrackingQueueTypeAlloc,
- numSiteQs);
+ reserved->tracking = IOTrackingQueueAlloc(inClassName, inClassSize, 0, true);
#endif
/* Hack alert: We are just casting inClassName and storing it in
@@ -604,7 +591,6 @@
case kNoDictionaries:
sBootstrapState = kMakingDictionaries;
// No break; fall through
- [[clang::fallthrough]];
case kMakingDictionaries:
sAllClassesDict = OSDictionary::withCapacity(kClassCapacityIncrement);
@@ -614,8 +600,7 @@
}
sAllClassesDict->setOptions(OSCollection::kSort, OSCollection::kSort);
- // No break; fall through
- [[clang::fallthrough]];
+ // No break; fall through
case kCompletedBootstrap:
{
@@ -657,11 +642,7 @@
/* Log this error here so we can include the class name.
* xxx - we should look up the other kext that defines the class
*/
-#if CONFIG_EMBEDDED
- panic(
-#else
OSKextLog(myKext, kOSMetaClassLogSpec,
-#endif /* CONFIG_EMBEDDED */
"OSMetaClass: Kext %s class %s is a duplicate;"
"kext %s already has a class by that name.",
sStalled->kextIdentifier, (const char *)me->className,
@@ -730,8 +711,8 @@
OSMetaClassLogErrorForKext(result, myKext);
}
- OSSafeReleaseNULL(myKextName);
- OSSafeReleaseNULL(myKext);
+ OSSafeRelease(myKextName);
+ OSSafeRelease(myKext);
if (sStalled) {
OSMETA_ACCUMSIZE(-(sStalled->capacity * sizeof(OSMetaClass *) +
@@ -793,7 +774,7 @@
result = theKext->hasOSMetaClassInstances();
finish:
- OSSafeReleaseNULL(theKext);
+ OSSafeRelease(theKext);
return result;
}
@@ -951,43 +932,6 @@
/*********************************************************************
*********************************************************************/
-bool
-OSMetaClass::removeClasses(OSCollection * metaClasses)
-{
- OSCollectionIterator * classIterator;
- OSMetaClass * checkClass;
- bool result;
-
- classIterator = OSCollectionIterator::withCollection(metaClasses);
- if (!classIterator) return (false);
-
- IOLockLock(sAllClassesLock);
-
- result = false;
- do
- {
- while ((checkClass = (OSMetaClass *)classIterator->getNextObject())
- && !checkClass->getInstanceCount()
- && !checkClass->reserved->retain) {}
- if (checkClass) break;
- classIterator->reset();
- while ((checkClass = (OSMetaClass *)classIterator->getNextObject()))
- {
- sAllClassesDict->removeObject(checkClass->className);
- }
- result = true;
- }
- while (false);
-
- IOLockUnlock(sAllClassesLock);
- OSSafeReleaseNULL(classIterator);
-
- return (result);
-}
-
-
-/*********************************************************************
-*********************************************************************/
const OSMetaClass *
OSMetaClass::getMetaClassWithName(const OSSymbol * name)
{
@@ -1008,46 +952,15 @@
/*********************************************************************
*********************************************************************/
-const OSMetaClass *
-OSMetaClass::copyMetaClassWithName(const OSSymbol * name)
-{
- const OSMetaClass * meta;
-
- if (!name) return (0);
-
- meta = 0;
- IOLockLock(sAllClassesLock);
- if (sAllClassesDict) {
- meta = (OSMetaClass *) sAllClassesDict->getObject(name);
- if (meta) OSIncrementAtomic(&meta->reserved->retain);
- }
- IOLockUnlock(sAllClassesLock);
-
- return (meta);
-}
-
-/*********************************************************************
-*********************************************************************/
-void
-OSMetaClass::releaseMetaClass() const
-{
- OSDecrementAtomic(&reserved->retain);
-}
-
-/*********************************************************************
-*********************************************************************/
OSObject *
OSMetaClass::allocClassWithName(const OSSymbol * name)
{
- const OSMetaClass * meta;
- OSObject * result;
-
- result = 0;
- meta = copyMetaClassWithName(name);
- if (meta)
- {
+ OSObject * result = 0;
+
+ const OSMetaClass * const meta = getMetaClassWithName(name);
+
+ if (meta) {
result = meta->alloc();
- meta->releaseMetaClass();
}
return result;
@@ -1278,7 +1191,7 @@
} while (0);
finish:
- OSSafeReleaseNULL(classDict);
+ OSSafeRelease(classDict);
IOLockUnlock(sAllClassesLock);
@@ -1319,7 +1232,7 @@
{
IOTracking * mem = (typeof(mem)) instance; mem--;
- return (IOTrackingAdd(reserved->tracking, mem, classSize, false, VM_KERN_MEMORY_NONE));
+ return (IOTrackingAdd(reserved->tracking, mem, classSize, false));
}
void OSMetaClass::trackedFree(OSObject * instance) const