Only check SDL_SYS_JoystickNeedsPolling() if we know we don't need to poll for other reasons. This avoids a select() syscall on Linux if it isn't necessary.
authorSam Lantinga <slouken@libsdl.org>
Fri, 14 Dec 2012 09:22:13 -0800
changeset 6753 332c36fd0fd7
parent 6752 8de11011eb1f
child 6754 c8cbb53af33e
Only check SDL_SYS_JoystickNeedsPolling() if we know we don't need to poll for other reasons. This avoids a select() syscall on Linux if it isn't necessary.
src/events/SDL_events.c
src/joystick/SDL_joystick.c
--- a/src/events/SDL_events.c	Thu Dec 13 22:26:30 2012 -0500
+++ b/src/events/SDL_events.c	Fri Dec 14 09:22:13 2012 -0800
@@ -70,9 +70,9 @@
 SDL_ShouldPollJoystick()
 {
 #if !SDL_JOYSTICK_DISABLED
-    if (SDL_PrivateJoystickNeedsPolling() &&
-        (!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] ||
-         SDL_JoystickEventState(SDL_QUERY))) {
+    if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] ||
+         SDL_JoystickEventState(SDL_QUERY)) &&
+        SDL_PrivateJoystickNeedsPolling()) {
         return SDL_TRUE;
     }
 #endif
--- a/src/joystick/SDL_joystick.c	Thu Dec 13 22:26:30 2012 -0500
+++ b/src/joystick/SDL_joystick.c	Fri Dec 14 09:22:13 2012 -0800
@@ -637,7 +637,7 @@
 SDL_JoystickEventState(int state)
 {
 #if SDL_EVENTS_DISABLED
-    return SDL_IGNORE;
+    return SDL_DISABLE;
 #else
     const Uint32 event_list[] = {
         SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYHATMOTION,
@@ -647,7 +647,7 @@
 
     switch (state) {
     case SDL_QUERY:
-        state = SDL_IGNORE;
+        state = SDL_DISABLE;
         for (i = 0; i < SDL_arraysize(event_list); ++i) {
             state = SDL_EventState(event_list[i], SDL_QUERY);
             if (state == SDL_ENABLE) {
@@ -669,15 +669,10 @@
 SDL_bool 
 SDL_PrivateJoystickNeedsPolling()
 {
-	if ( SDL_SYS_JoystickNeedsPolling() )
-	{
-		// sys layer needs us to think
+	if (SDL_joysticks != NULL) {
 		return SDL_TRUE;
-	}
-	else
-	{
-		// otherwise only do it if a joystick is opened
-		return SDL_joysticks != NULL; 
+	} else {
+		return SDL_SYS_JoystickNeedsPolling();
 	}
 }