Loading...
iokit/Tests/TestServices/TestIOServiceUserNotification.cpp xnu-12377.121.6 xnu-8792.61.2
--- xnu/xnu-12377.121.6/iokit/Tests/TestServices/TestIOServiceUserNotification.cpp
+++ xnu/xnu-8792.61.2/iokit/Tests/TestServices/TestIOServiceUserNotification.cpp
@@ -1,10 +1,10 @@
-#if DEVELOPMENT || DEBUG
 #include "TestIOServiceUserNotification.h"
 #include <IOKit/IOService.h>
 #include <IOKit/IOUserClient.h>
 #include <IOKit/IOKitServer.h>
 #include <kern/ipc_kobject.h>
-#include "../../Kernel/IOServicePrivate.h"
+
+#if DEVELOPMENT || DEBUG
 
 OSDefineMetaClassAndStructors(TestIOServiceUserNotification, IOService);
 
@@ -17,92 +17,12 @@
 	bool ret = IOService::start(provider);
 	if (ret && str != NULL) {
 		setProperty(gIOUserClientClassKey, str);
-		fUserNotifications = OSArray::withCapacity(1);
-		fLock = IOLockAlloc();
 		registerService();
 	}
 	OSSafeReleaseNULL(str);
 	return ret;
 }
 
-void
-TestIOServiceUserNotification::free()
-{
-	if (fLock) {
-		IOLockFree(fLock);
-		fLock = NULL;
-	}
-	OSSafeReleaseNULL(fUserNotifications);
-	IOService::free();
-}
-
-void
-TestIOServiceUserNotification::registerUserNotification(OSObject * notification)
-{
-	IOLockLock(fLock);
-	// Proactively trim the list to avoid holding too many objects
-	trimUserNotificationsLocked();
-	assert(fUserNotifications->getNextIndexOfObject(notification, 0) == -1);
-	fUserNotifications->setObject(notification);
-	IOLockUnlock(fLock);
-}
-
-void
-TestIOServiceUserNotification::trimUserNotificationsLocked()
-{
-	OSArray * remaining = OSArray::withCapacity(1);
-	if (!remaining) {
-		return;
-	}
-	fUserNotifications->iterateObjects(^(OSObject * obj) {
-		if (obj->getRetainCount() != 1) {
-		        remaining->setObject(obj);
-		}
-		return false;
-	});
-	fUserNotifications->release();
-	fUserNotifications = remaining;
-}
-
-size_t
-TestIOServiceUserNotification::getUserNotificationLeakCount()
-{
-	size_t count = 0;
-	IOLockLock(fLock);
-	trimUserNotificationsLocked();
-	count = fUserNotifications->getCount();
-	IOLockUnlock(fLock);
-	return count;
-}
-
-bool
-TestIOServiceUserNotificationUserClient::start(IOService * provider)
-{
-	if (!IOUserClient::start(provider)) {
-		return false;
-	}
-	fProvider = OSDynamicCast(TestIOServiceUserNotification, provider);
-	assert(fProvider);
-	return true;
-}
-
-IONotifier *
-TestIOServiceUserNotificationUserClient::registerInterest(const OSSymbol * typeOfInterest,
-    IOServiceInterestHandler handler,
-    void * target,
-    void * ref)
-{
-	IONotifier * notify = IOService::registerInterest(typeOfInterest, handler, target, ref);
-
-	// No straightforward way to make sure registerInterest is called from the test app
-	// Could check if handler is _ZN32IOServiceMessageUserNotification8_handlerEPvS0_jP9IOServiceS0_m
-	// But still cannot rule out other user process regisering interest
-	OSObject * obj = (OSObject *)target;
-	// Just panic the system if target isn't OSObject
-	fProvider->registerUserNotification(obj);
-
-	return notify;
-}
 
 IOReturn
 TestIOServiceUserNotificationUserClient::clientClose()
@@ -117,11 +37,7 @@
 TestIOServiceUserNotificationUserClient::externalMethod(uint32_t selector, IOExternalMethodArguments * args,
     IOExternalMethodDispatch * dispatch, OSObject * target, void * reference)
 {
-	if (selector == 0) {
-		registerService();
-	} else if (selector == 1 && args->scalarOutputCount >= 1) {
-		args->scalarOutput[0] = fProvider->getUserNotificationLeakCount();
-	}
+	registerService();
 	return kIOReturnSuccess;
 }