diff --git a/src/SDL.c b/src/SDL.c index 9a8da1eeb..dacd0f7a4 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -38,7 +38,8 @@ #if !SDL_TIMERS_DISABLED extern int SDL_TimerInit(void); extern void SDL_TimerQuit(void); -extern void SDL_InitTicks(void); +extern void SDL_TicksInit(void); +extern void SDL_TicksQuit(void); #endif #if SDL_VIDEO_DRIVER_WINDOWS extern int SDL_HelperWindowCreate(void); @@ -123,7 +124,7 @@ SDL_InitSubSystem(Uint32 flags) #endif #if !SDL_TIMERS_DISABLED - SDL_InitTicks(); + SDL_TicksInit(); #endif if ((flags & SDL_INIT_GAMECONTROLLER)) { @@ -355,6 +356,10 @@ SDL_Quit(void) #endif SDL_QuitSubSystem(SDL_INIT_EVERYTHING); +#if !SDL_TIMERS_DISABLED + SDL_TicksQuit(); +#endif + SDL_ClearHints(); SDL_AssertionsQuit(); SDL_LogResetPriorities(); diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c index c03da03ab..9d41a194e 100644 --- a/src/test/SDL_test_common.c +++ b/src/test/SDL_test_common.c @@ -1542,6 +1542,7 @@ SDLTest_CommonQuit(SDLTest_CommonState * state) SDL_AudioQuit(); } SDL_free(state); + SDL_Quit(); } /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/timer/SDL_timer_c.h b/src/timer/SDL_timer_c.h index 91646d990..8d563cff8 100644 --- a/src/timer/SDL_timer_c.h +++ b/src/timer/SDL_timer_c.h @@ -26,7 +26,8 @@ #define ROUND_RESOLUTION(X) \ (((X+TIMER_RESOLUTION-1)/TIMER_RESOLUTION)*TIMER_RESOLUTION) -extern void SDL_InitTicks(void); +extern void SDL_TicksInit(void); +extern void SDL_TicksQuit(void); extern int SDL_TimerInit(void); extern void SDL_TimerQuit(void); diff --git a/src/timer/dummy/SDL_systimer.c b/src/timer/dummy/SDL_systimer.c index 0e2703fc2..57899ae95 100644 --- a/src/timer/dummy/SDL_systimer.c +++ b/src/timer/dummy/SDL_systimer.c @@ -27,7 +27,7 @@ static SDL_bool ticks_started = SDL_FALSE; void -SDL_InitTicks(void) +SDL_TicksInit(void) { if (ticks_started) { return; @@ -35,11 +35,17 @@ SDL_InitTicks(void) ticks_started = SDL_TRUE; } +void +SDL_TicksQuit(void) +{ + ticks_started = SDL_FALSE; +} + Uint32 SDL_GetTicks(void) { if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } SDL_Unsupported(); diff --git a/src/timer/haiku/SDL_systimer.c b/src/timer/haiku/SDL_systimer.c index 1500f6b26..685f72a82 100644 --- a/src/timer/haiku/SDL_systimer.c +++ b/src/timer/haiku/SDL_systimer.c @@ -30,7 +30,7 @@ static bigtime_t start; static SDL_bool ticks_started = SDL_FALSE; void -SDL_InitTicks(void) +SDL_TicksInit(void) { if (ticks_started) { return; @@ -41,11 +41,17 @@ SDL_InitTicks(void) start = system_time(); } +void +SDL_TicksQuit(void) +{ + ticks_started = SDL_FALSE; +} + Uint32 SDL_GetTicks(void) { if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } return ((system_time() - start) / 1000); diff --git a/src/timer/psp/SDL_systimer.c b/src/timer/psp/SDL_systimer.c index 0f05a1363..b706f4495 100644 --- a/src/timer/psp/SDL_systimer.c +++ b/src/timer/psp/SDL_systimer.c @@ -31,7 +31,8 @@ static struct timeval start; static SDL_bool ticks_started = SDL_FALSE; -void SDL_InitTicks(void) +void +SDL_TicksInit(void) { if (ticks_started) { return; @@ -41,10 +42,16 @@ void SDL_InitTicks(void) gettimeofday(&start, NULL); } +void +SDL_TicksQuit(void) +{ + ticks_started = SDL_FALSE; +} + Uint32 SDL_GetTicks(void) { if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } struct timeval now; diff --git a/src/timer/unix/SDL_systimer.c b/src/timer/unix/SDL_systimer.c index 7c35bef52..0f4c7571e 100644 --- a/src/timer/unix/SDL_systimer.c +++ b/src/timer/unix/SDL_systimer.c @@ -59,7 +59,7 @@ static struct timeval start_tv; static SDL_bool ticks_started = SDL_FALSE; void -SDL_InitTicks(void) +SDL_TicksInit(void) { if (ticks_started) { return; @@ -83,12 +83,18 @@ SDL_InitTicks(void) } } +void +SDL_TicksQuit(void) +{ + ticks_started = SDL_FALSE; +} + Uint32 SDL_GetTicks(void) { Uint32 ticks; if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } if (has_monotonic_time) { @@ -117,7 +123,7 @@ SDL_GetPerformanceCounter(void) { Uint64 ticks; if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } if (has_monotonic_time) { @@ -146,7 +152,7 @@ Uint64 SDL_GetPerformanceFrequency(void) { if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } if (has_monotonic_time) { diff --git a/src/timer/windows/SDL_systimer.c b/src/timer/windows/SDL_systimer.c index b1fe30171..186233a8e 100644 --- a/src/timer/windows/SDL_systimer.c +++ b/src/timer/windows/SDL_systimer.c @@ -40,7 +40,6 @@ static BOOL hires_timer_available; static LARGE_INTEGER hires_start_ticks; /* The number of ticks per second of the high-resolution performance counter */ static LARGE_INTEGER hires_ticks_per_second; -#endif static void timeSetPeriod(UINT uPeriod) @@ -76,13 +75,15 @@ SDL_TimerResolutionChanged(void *userdata, const char *name, const char *oldValu } } +#endif /* !USE_GETTICKCOUNT */ + void -SDL_InitTicks(void) +SDL_TicksInit(void) { if (ticks_started) { return; } - ticks_started = TRUE; + ticks_started = SDL_TRUE; /* Set first ticks value */ #ifdef USE_GETTICKCOUNT @@ -98,11 +99,26 @@ SDL_InitTicks(void) hires_timer_available = FALSE; timeSetPeriod(1); /* use 1 ms timer precision */ start = timeGetTime(); + + SDL_AddHintCallback(SDL_HINT_TIMER_RESOLUTION, + SDL_TimerResolutionChanged, NULL); + } +#endif +} + +void +SDL_TicksQuit(void) +{ +#ifndef USE_GETTICKCOUNT + if (!hires_timer_available) { + SDL_DelHintCallback(SDL_HINT_TIMER_RESOLUTION, + SDL_TimerResolutionChanged, NULL); + + timeSetPeriod(0); } #endif - SDL_AddHintCallback(SDL_HINT_TIMER_RESOLUTION, - SDL_TimerResolutionChanged, NULL); + ticks_started = SDL_FALSE; } Uint32 @@ -114,7 +130,7 @@ SDL_GetTicks(void) #endif if (!ticks_started) { - SDL_InitTicks(); + SDL_TicksInit(); } #ifdef USE_GETTICKCOUNT diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 87e8506c0..7426e2f49 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -432,7 +432,7 @@ SDL_VideoInit(const char *driver_name) } #if !SDL_TIMERS_DISABLED - SDL_InitTicks(); + SDL_TicksInit(); #endif /* Start the event loop */