Browse Source

Revert "Removing a timer that isn't running is a success."

This reverts commit 795499a529f27469e9c97de596a1606dfc900eec.

This breaks compatibility with SDL2 and there isn't a compelling reason to make this change.
Sam Lantinga 8 months ago
parent
commit
d68d32e12c
2 changed files with 9 additions and 3 deletions
  1. 7 1
      src/timer/SDL_timer.c
  2. 2 2
      test/testautomation_timer.c

+ 7 - 1
src/timer/SDL_timer.c

@@ -353,6 +353,7 @@ int SDL_RemoveTimer(SDL_TimerID id)
 {
     SDL_TimerData *data = &SDL_timer_data;
     SDL_TimerMap *prev, *entry;
+    SDL_bool canceled = SDL_FALSE;
 
     if (!id) {
         return SDL_InvalidParamError("id");
@@ -376,10 +377,15 @@ int SDL_RemoveTimer(SDL_TimerID id)
     if (entry) {
         if (!SDL_AtomicGet(&entry->timer->canceled)) {
             SDL_AtomicSet(&entry->timer->canceled, 1);
+            canceled = SDL_TRUE;
         }
         SDL_free(entry);
     }
-    return 0;
+    if (canceled) {
+        return 0;
+    } else {
+        return SDL_SetError("Timer not found");
+    }
 }
 
 #else

+ 2 - 2
test/testautomation_timer.c

@@ -142,7 +142,7 @@ static int timer_addRemoveTimer(void *arg)
     /* Try to remove timer again (should be a NOOP) */
     result = SDL_RemoveTimer(id);
     SDLTest_AssertPass("Call to SDL_RemoveTimer()");
-    SDLTest_AssertCheck(result == 0, "Check result value, expected: 0, got: %i", result);
+    SDLTest_AssertCheck(result < 0, "Check result value, expected: <0, got: %i", result);
 
     /* Reset state */
     param = SDLTest_RandomIntegerInRange(-1024, 1024);
@@ -162,7 +162,7 @@ static int timer_addRemoveTimer(void *arg)
     /* Remove timer again and check that callback was called */
     result = SDL_RemoveTimer(id);
     SDLTest_AssertPass("Call to SDL_RemoveTimer()");
-    SDLTest_AssertCheck(result == 0, "Check result value, expected: 0, got: %i", result);
+    SDLTest_AssertCheck(result < 0, "Check result value, expected: <0, got: %i", result);
     SDLTest_AssertCheck(g_timerCallbackCalled == 1, "Check callback WAS called, expected: 1, got: %i", g_timerCallbackCalled);
 
     return TEST_COMPLETED;