Commit fff7503b6afa5a670ec934fe472908157a02bcb1

Edward Rudd 2014-02-07T09:35:13

ignore hot plugs in mac haptic layer IF hap tics hasn't been initialized.

diff --git a/src/haptic/darwin/SDL_syshaptic.c b/src/haptic/darwin/SDL_syshaptic.c
index 306eda9..4a62e35 100644
--- a/src/haptic/darwin/SDL_syshaptic.c
+++ b/src/haptic/darwin/SDL_syshaptic.c
@@ -85,7 +85,7 @@ static int HIDGetDeviceProduct(io_service_t dev, char *name);
 
 static SDL_hapticlist_item *SDL_hapticlist = NULL;
 static SDL_hapticlist_item *SDL_hapticlist_tail = NULL;
-static int numhaptics = 0;
+static int numhaptics = -1;
 
 /*
  * Like strerror but for force feedback errors.
@@ -155,6 +155,11 @@ SDL_SYS_HapticInit(void)
     CFDictionaryRef match;
     io_service_t device;
 
+    if (numhaptics != -1) {
+        return SDL_Error("Haptic subsystem already initialized!");
+    }
+    numhaptics = 0;
+
     /* Get HID devices. */
     match = IOServiceMatching(kIOHIDDeviceKey);
     if (match == NULL) {
@@ -214,6 +219,10 @@ MacHaptic_MaybeAddDevice( io_object_t device )
     CFTypeRef refCF;
     SDL_hapticlist_item *item;
 
+    if (numhaptics == -1) {
+        return -1; /* not initialized. We'll pick these up on enumeration if we init later. */
+    }
+
     /* Check for force feedback. */
     if (FFIsForceFeedback(device) != FF_OK) {
         return -1;
@@ -288,6 +297,10 @@ MacHaptic_MaybeRemoveDevice( io_object_t device )
     SDL_hapticlist_item *item;
     SDL_hapticlist_item *prev = NULL;
 
+    if (numhaptics == -1) {
+        return -1; /* not initialized. ignore this. */
+    }
+
     for (item = SDL_hapticlist; item != NULL; item = item->next) {
         /* found it, remove it. */
         if (IOObjectIsEqualTo((io_object_t) item->dev, device)) {
@@ -674,7 +687,7 @@ SDL_SYS_HapticQuit(void)
         IOObjectRelease(item->dev);
         SDL_free(item);
     }
-    numhaptics = 0;
+    numhaptics = -1;
 }