# HG changeset patch # User Sam Lantinga # Date 1104865532 0 # Node ID e719ee25439d29643559aaec0ab5f5e96c9ef12f # Parent 3d4f1930ed02f451653e0b0a021e97ee10eeb3e4 Fix potential use of freed memory in the threaded timer system diff -r 3d4f1930ed02 -r e719ee25439d src/timer/SDL_timer.c --- a/src/timer/SDL_timer.c Tue Jan 04 19:04:14 2005 +0000 +++ b/src/timer/SDL_timer.c Tue Jan 04 19:05:32 2005 +0000 @@ -45,7 +45,7 @@ Uint32 SDL_alarm_interval = 0; SDL_TimerCallback SDL_alarm_callback; -static SDL_bool list_changed = SDL_FALSE; +static volatile SDL_bool list_changed = SDL_FALSE; /* Data used for a thread-based timer */ static int SDL_timer_threaded = 0; @@ -114,6 +114,9 @@ Uint32 now, ms; SDL_TimerID t, prev, next; int removed; + SDL_NewTimerCallback callback; + Uint32 interval; + void *param; now = SDL_GetTicks(); @@ -133,8 +136,11 @@ printf("Executing timer %p (thread = %d)\n", t, SDL_ThreadID()); #endif + callback = t->cb; + interval = t->interval; + param = t->param; SDL_mutexV(SDL_timer_mutex); - ms = t->cb(t->interval, t->param); + ms = callback(interval, param); SDL_mutexP(SDL_timer_mutex); if ( list_changed ) { /* Abort, list of timers has been modified */