+//******************************************************************************
+// getSharedRecursiveLock
+//
+//******************************************************************************
+IORecursiveLock *IOPMinformeeList::getSharedRecursiveLock( void )
+{
+ static IORecursiveLock *sharedListLock = NULL;
+
+ /* A running system could have 50-60+ instances of IOPMInformeeList.
+ * They'll share this lock, since list insertion and removal is relatively
+ * rare, and generally tied to major events like device discovery.
+ *
+ * getSharedRecursiveLock() is called from IOStartIOKit to initialize
+ * the sharedListLock before any IOPMinformeeLists are instantiated.
+ *
+ * The IOPMinformeeList class will be around for the lifetime of the system,
+ * we don't worry about freeing this lock.
+ */
+
+ if ( NULL == sharedListLock )
+ {
+ sharedListLock = IORecursiveLockAlloc();
+ }
+ return sharedListLock;
+}
+
+ //*********************************************************************************
+// appendNewInformee
+ //
+ //*********************************************************************************
+IOPMinformee *IOPMinformeeList::appendNewInformee ( IOService * newObject )
+{
+ IOPMinformee * newInformee;
+
+ if (!newObject)
+ return NULL;
+
+ newInformee = IOPMinformee::withObject (newObject);
+
+ if (!newInformee)
+ return NULL;
+
+ if( IOPMNoErr == addToList (newInformee))
+ return newInformee;
+ else
+ return NULL;
+}
+
+