1#include "IOHIDWorkLoop.h" 2 3// system 4#include <IOKit/IOWorkLoop.h> 5#include <IOKit/IOLocksPrivate.h> 6 7#define super IOWorkLoop 8OSDefineMetaClassAndStructors( IOHIDWorkLoop, IOWorkLoop ) 9 10static SInt32 gCount = 0; 11 12IOHIDWorkLoop * IOHIDWorkLoop::workLoop() 13{ 14 IOHIDWorkLoop *loop; 15 16 loop = new IOHIDWorkLoop; 17 if(!loop) 18 return loop; 19 if(!loop->init()) { 20 loop->release(); 21 loop = NULL; 22 } 23 return loop; 24} 25 26bool 27IOHIDWorkLoop::init ( void ) 28{ 29 30 SInt32 count = OSIncrementAtomic ( &gCount ); 31 char name[64]; 32 33 snprintf ( name, 64, "HID %d", ( int ) count ); 34 fLockGroup = lck_grp_alloc_init ( name, LCK_GRP_ATTR_NULL ); 35 if ( fLockGroup ) 36 { 37 gateLock = IORecursiveLockAllocWithLockGroup ( fLockGroup ); 38 } 39 40 return super::init ( ); 41 42} 43 44void IOHIDWorkLoop::free ( void ) 45{ 46 47 if ( fLockGroup ) 48 { 49 lck_grp_free ( fLockGroup ); 50 fLockGroup = NULL; 51 } 52 53 super::free ( ); 54 55} 56