Loading...
iokit/Kernel/IOCommandPool.cpp xnu-12377.101.15 xnu-792
--- xnu/xnu-12377.101.15/iokit/Kernel/IOCommandPool.cpp
+++ xnu/xnu-792/iokit/Kernel/IOCommandPool.cpp
@@ -1,29 +1,23 @@
 /*
  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  *
- * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. The rights granted to you under the License
- * may not be used to create, or enable the creation or redistribution of,
- * unlawful or unlicensed copies of an Apple operating system, or to
- * circumvent, violate, or enable the circumvention or violation of, any
- * terms of an Apple operating system software license agreement.
- *
- * Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
  */
 
 /*
@@ -37,10 +31,7 @@
  *
  */
 
-#define IOKIT_ENABLE_SHARED_PTR
-
 #include <IOKit/IOCommandPool.h>
-#include <libkern/c++/OSSharedPtr.h>
 
 #define super OSObject
 OSDefineMetaClassAndStructors(IOCommandPool, OSObject);
@@ -57,67 +48,62 @@
 //	withWorkLoop -	primary initializer and factory method
 //--------------------------------------------------------------------------
 
-OSSharedPtr<IOCommandPool>
-IOCommandPool::
+IOCommandPool *IOCommandPool::
 withWorkLoop(IOWorkLoop *inWorkLoop)
 {
-	OSSharedPtr<IOCommandPool> me = OSMakeShared<IOCommandPool>();
-
-	if (me && !me->initWithWorkLoop(inWorkLoop)) {
-		return nullptr;
-	}
-
-	return me;
-}
-
-
-bool
-IOCommandPool::
+    IOCommandPool * me = new IOCommandPool;
+    
+    if (me && !me->initWithWorkLoop(inWorkLoop)) {
+        me->release();
+        return 0;
+    }
+    
+    return me;
+}
+
+
+bool IOCommandPool::
 initWithWorkLoop(IOWorkLoop *inWorkLoop)
 {
-	assert(inWorkLoop);
-
-	if (!super::init()) {
-		return false;
-	}
-
-	queue_init(&fQueueHead);
-
-	fSerializer = IOCommandGate::commandGate(this);
-	assert(fSerializer);
-	if (!fSerializer) {
-		return false;
-	}
-
-	if (kIOReturnSuccess != inWorkLoop->addEventSource(fSerializer.get())) {
-		return false;
-	}
-
-	return true;
+    assert(inWorkLoop);
+    
+    if (!super::init())
+        return false;
+    
+    queue_init(&fQueueHead);
+    
+    fSerializer = IOCommandGate::commandGate(this);
+    assert(fSerializer);
+    if (!fSerializer)
+        return false;
+    
+    if (kIOReturnSuccess != inWorkLoop->addEventSource(fSerializer))
+        return false;
+    
+    return true;
 }
 
 //--------------------------------------------------------------------------
 //	commandPool & init -	obsolete initializer and factory method
 //--------------------------------------------------------------------------
 
-OSSharedPtr<IOCommandPool>
-IOCommandPool::
+IOCommandPool *IOCommandPool::
 commandPool(IOService * inOwner, IOWorkLoop *inWorkLoop, UInt32 inSize)
 {
-	OSSharedPtr<IOCommandPool> me = OSMakeShared<IOCommandPool>();
-
-	if (me && !me->init(inOwner, inWorkLoop, inSize)) {
-		return nullptr;
-	}
-
-	return me;
-}
-
-bool
-IOCommandPool::
+    IOCommandPool * me = new IOCommandPool;
+    
+    if (me && !me->init(inOwner, inWorkLoop, inSize)) {
+        me->release();
+        return 0;
+    }
+    
+    return me;
+}
+
+bool IOCommandPool::
 init(IOService */* inOwner */, IOWorkLoop *inWorkLoop, UInt32 /* inSize */)
 {
-	return initWithWorkLoop(inWorkLoop);
+    return initWithWorkLoop(inWorkLoop);
 }
 
 
@@ -128,18 +114,18 @@
 void
 IOCommandPool::free(void)
 {
-	if (fSerializer) {
-		// remove our event source from owner's workloop
-		IOWorkLoop *wl = fSerializer->getWorkLoop();
-		if (wl) {
-			wl->removeEventSource(fSerializer.get());
-		}
-
-		fSerializer.reset();
-	}
-
-	// Tell our superclass to cleanup too
-	super::free();
+    if (fSerializer) {
+        // remove our event source from owner's workloop
+        IOWorkLoop *wl = fSerializer->getWorkLoop();
+        if (wl)
+            wl->removeEventSource(fSerializer);
+        
+        fSerializer->release();
+        fSerializer = 0;
+    }
+            
+    // Tell our superclass to cleanup too
+    super::free();
 }
 
 
@@ -149,21 +135,19 @@
 //			waiting for resources
 //--------------------------------------------------------------------------
 
-OSSharedPtr<IOCommand>
+IOCommand *
 IOCommandPool::getCommand(bool blockForCommand)
 {
-	IOReturn     result  = kIOReturnSuccess;
-	IOCommand *command = NULL;
-
-	IOCommandGate::Action func = OSMemberFunctionCast(
-		IOCommandGate::Action, this, &IOCommandPool::gatedGetCommand);
-	result = fSerializer->
-	    runAction(func, (void *) &command, (void *) blockForCommand);
-	if (kIOReturnSuccess == result) {
-		return OSSharedPtr<IOCommand>(command, OSNoRetain);
-	} else {
-		return NULL;
-	}
+    IOReturn	 result  = kIOReturnSuccess;
+    IOCommand *command = 0;
+
+    result = fSerializer->runAction((IOCommandGate::Action)
+        &IOCommandPool::gatedGetCommand, 
+            (void *) &command, (void *) blockForCommand);
+    if (kIOReturnSuccess == result)
+        return command;
+    else
+        return 0;
 }
 
 
@@ -172,22 +156,20 @@
 //				(on safe side of command gate)
 //--------------------------------------------------------------------------
 
-IOReturn
-IOCommandPool::
+IOReturn IOCommandPool::
 gatedGetCommand(IOCommand **command, bool blockForCommand)
 {
-	while (queue_empty(&fQueueHead)) {
-		if (!blockForCommand) {
-			return kIOReturnNoResources;
-		}
-
-		fSleepers++;
-		fSerializer->commandSleep(&fSleepers, THREAD_UNINT);
-	}
-
-	queue_remove_first(&fQueueHead,
-	    *command, IOCommand *, fCommandChain);
-	return kIOReturnSuccess;
+    while (queue_empty(&fQueueHead)) {
+        if (!blockForCommand)
+            return kIOReturnNoResources;
+
+        fSleepers++;
+        fSerializer->commandSleep(&fSleepers, THREAD_UNINT);
+    }
+
+    queue_remove_first(&fQueueHead,
+                       *command, IOCommand *, fCommandChain);
+    return kIOReturnSuccess;
 }
 
 
@@ -195,29 +177,26 @@
 //	returnCommand -		Returns command to the pool.
 //--------------------------------------------------------------------------
 
-void
-IOCommandPool::
+void IOCommandPool::
 returnCommand(IOCommand *command)
 {
-	IOCommandGate::Action func = OSMemberFunctionCast(
-		IOCommandGate::Action, this, &IOCommandPool::gatedReturnCommand);
-	(void) fSerializer->runAction(func, (void *) command);
+    (void) fSerializer->runAction((IOCommandGate::Action)
+        &IOCommandPool::gatedReturnCommand, (void *) command);
 }
 
 
 //--------------------------------------------------------------------------
 //	gatedReturnCommand -	Callthrough function
-//                              (on safe side of command gate)
-//--------------------------------------------------------------------------
-
-IOReturn
-IOCommandPool::
+// 				(on safe side of command gate)
+//--------------------------------------------------------------------------
+
+IOReturn IOCommandPool::
 gatedReturnCommand(IOCommand *command)
 {
-	queue_enter_first(&fQueueHead, command, IOCommand *, fCommandChain);
-	if (fSleepers) {
-		fSerializer->commandWakeup(&fSleepers, /* oneThread */ true);
-		fSleepers--;
-	}
-	return kIOReturnSuccess;
-}
+    queue_enter(&fQueueHead, command, IOCommand *, fCommandChain);
+    if (fSleepers) {
+        fSerializer->commandWakeup(&fSleepers, /* oneThread */ true);
+        fSleepers--;
+    }
+    return kIOReturnSuccess;
+}