diff --git a/src/timer/SDL_timer.c b/src/timer/SDL_timer.c index a936367f9..20050952b 100644 --- a/src/timer/SDL_timer.c +++ b/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 diff --git a/test/testautomation_timer.c b/test/testautomation_timer.c index 98dce1e67..23d971218 100644 --- a/test/testautomation_timer.c +++ b/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;