"error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType"
Question: Sometimes, mostly on heavy load, I am getting these errors:

    
    
    2013-04-23 23:53:13.595 MusicPlayer[74705:6303] unrecognized type is -2
    2013-04-23 23:53:14.686 MusicPlayer[74705:6303] *** Assertion failure in -[NSEvent _initWithCGSEvent:eventRef:], /SourceCache/AppKit/AppKit-1187.37/AppKit.subproj/NSEvent.m:1348
    2013-04-24 00:40:47.358 MusicPlayer[74705:6303] unrecognized type is -2
    2013-04-24 00:40:47.561 MusicPlayer[74705:6303] *** Assertion failure in -[NSEvent _initWithCGSEvent:eventRef:], /SourceCache/AppKit/AppKit-1187.37/AppKit.subproj/NSEvent.m:1348
    2013-04-24 00:42:49.016 MusicPlayer[74705:6303] unrecognized type is -2
    2013-04-24 00:42:49.017 MusicPlayer[74705:6303] *** Assertion failure in -[NSEvent _initWithCGSEvent:eventRef:], /SourceCache/AppKit/AppKit-1187.37/AppKit.subproj/NSEvent.m:1348
    2013-04-24 00:42:53.689 MusicPlayer[74705:6303] unrecognized type is -2
    2013-04-24 00:42:53.689 MusicPlayer[74705:6303] *** Assertion failure in -[NSEvent _initWithCGSEvent:eventRef:], /SourceCache/AppKit/AppKit-1187.37/AppKit.subproj/NSEvent.m:1348
    2013-04-24 00:43:01.091 MusicPlayer[74705:6303] unrecognized type is -2
    2013-04-24 00:43:01.091 MusicPlayer[74705:6303] *** Assertion failure in -[NSEvent _initWithCGSEvent:eventRef:], /SourceCache/AppKit/AppKit-1187.37/AppKit.subproj/NSEvent.m:1348
    2013-04-24 00:43:06.840 MusicPlayer[74705:6303] unrecognized type is -2
    2013-04-24 00:43:06.840 MusicPlayer[74705:6303] *** Assertion failure in -[NSEvent _initWithCGSEvent:eventRef:], /SourceCache/AppKit/AppKit-1187.37/AppKit.subproj/NSEvent.m:1348
    EXCEPTION
    Traceback (most recent call last):
      File "/Users/az/Programmierung/music-player/mac/build/Release/MusicPlayer.app/Contents/Resources/Python/mediakeys.py", line 71, in runEventsCapture
        line: Quartz.CFRunLoopRun()
        locals:
          Quartz = <local> <module 'Quartz' from '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Quartz/__init__.py'>
          Quartz.CFRunLoopRun = <local> <objc.function 'CFRunLoopRun' at 0x1027dfb30>
    error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
    EXCEPTION
    Traceback (most recent call last):
      File "/Users/az/Programmierung/music-player/mac/build/Release/MusicPlayer.app/Contents/Resources/Python/mediakeys.py", line 71, in runEventsCapture
        line: Quartz.CFRunLoopRun()
        locals:
          Quartz = <local> <module 'Quartz' from '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Quartz/__init__.py'>
          Quartz.CFRunLoopRun = <local> <objc.function 'CFRunLoopRun' at 0x1027dfb30>
    error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
    EXCEPTION
    Traceback (most recent call last):
      File "/Users/az/Programmierung/music-player/mac/build/Release/MusicPlayer.app/Contents/Resources/Python/mediakeys.py", line 71, in runEventsCapture
        line: Quartz.CFRunLoopRun()
        locals:
          Quartz = <local> <module 'Quartz' from '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Quartz/__init__.py'>
          Quartz.CFRunLoopRun = <local> <objc.function 'CFRunLoopRun' at 0x1027dfb30>
    error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
    new song: Tiestö - Reepublic, 00:15, mp3, 125 kbit/s, 233 KB
    EXCEPTION
    Traceback (most recent call last):
      File "/Users/az/Programmierung/music-player/mac/build/Release/MusicPlayer.app/Contents/Resources/Python/mediakeys.py", line 71, in runEventsCapture
        line: Quartz.CFRunLoopRun()
        locals:
          Quartz = <local> <module 'Quartz' from '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Quartz/__init__.py'>
          Quartz.CFRunLoopRun = <local> <objc.function 'CFRunLoopRun' at 0x1027dfb30>
    error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
    EXCEPTION
    Traceback (most recent call last):
      File "/Users/az/Programmierung/music-player/mac/build/Release/MusicPlayer.app/Contents/Resources/Python/mediakeys.py", line 71, in runEventsCapture
        line: Quartz.CFRunLoopRun()
        locals:
          Quartz = <local> <module 'Quartz' from '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Quartz/__init__.py'>
          Quartz.CFRunLoopRun = <local> <objc.function 'CFRunLoopRun' at 0x1027dfb30>
    error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
    EXCEPTION
    Traceback (most recent call last):
      File "/Users/az/Programmierung/music-player/mac/build/Release/MusicPlayer.app/Contents/Resources/Python/mediakeys.py", line 71, in runEventsCapture
        line: Quartz.CFRunLoopRun()
        locals:
          Quartz = <local> <module 'Quartz' from '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Quartz/__init__.py'>
          Quartz.CFRunLoopRun = <local> <objc.function 'CFRunLoopRun' at 0x1027dfb30>
    error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
    

The related code:

    
    
        import AppKit, Quartz
        from AppKit import NSSystemDefined
        pool = AppKit.NSAutoreleasePool.alloc().init()
    
        self.runLoopRef = Quartz.CFRunLoopGetCurrent()
    
        while True:
            # https://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html
            tap = Quartz.CGEventTapCreate(
                Quartz.kCGSessionEventTap, # Quartz.kCGSessionEventTap or kCGHIDEventTap
                Quartz.kCGHeadInsertEventTap, # Insert wherever, we do not filter
                Quartz.kCGEventTapOptionDefault, #Quartz.kCGEventTapOptionListenOnly,
                Quartz.CGEventMaskBit(NSSystemDefined), # NSSystemDefined for media keys
                self.eventTap,
                None
            )
            assert tap
    
            # Create a runloop source and add it to the current loop
            runLoopSource = Quartz.CFMachPortCreateRunLoopSource(None, tap, 0)
            Quartz.CFRunLoopAddSource(
                self.runLoopRef,
                runLoopSource,
                Quartz.kCFRunLoopDefaultMode
            )
    
            # Enable the tap
            Quartz.CGEventTapEnable(tap, True)
    
            try:
                # and run! This won't return until we exit or are terminated.
                Quartz.CFRunLoopRun()
            except Exception:
                # I got this one here once:
                # error: NSInternalInconsistencyException - Invalid parameter not satisfying: cgsEvent.type > 0 && cgsEvent.type <= kCGSLastEventType
                sys.excepthook(*sys.exc_info())
                continue # rerun
    
            # this is a regular quit
            break
    
        del pool
    

The exception mostly comes along with a hang of the GUI thread (which is the
main reason why I don't just want to ignore it - because it can be very
notable).


Answer: From [here](http://forums.macrumors.com/showthread.php?t=1145465), I got the
helpful information bit that says:

> Actually an event type CGEventType is defined in CGEventType.h as unsigned
> 32-bit integer. So your -2 is actually 0xFFFFFFFE. In CGEventType.h that's
> defined as kCGEventTapDisabledByTimeout. There's a comment just about this
> that says:
>  
>  
>       /* Out of band event types. These are delivered to the event tap
> callback
>          to notify it of unusual conditions that disable the event tap. */
>       kCGEventTapDisabledByTimeout = 0xFFFFFFFE,
>       kCGEventTapDisabledByUserInput = 0xFFFFFFFF
>  
>
> So it looks like your event tap is timing out. That's why your not getting
> anymore events after this.

In Python, in your event tap, you can check for this case like this:

    
    
    def eventTap(self, proxy, type_, event, refcon):
        if type_ < 0 or type_ > 0x7fffffff:
            # handle it ...
    

Note that the event tap is disabled after you got such an event type. So you
might want to restart your event loop.

