Fix potential use of freed memory in the threaded timer system
authorSam Lantinga <slouken@libsdl.org>
Tue, 04 Jan 2005 19:05:32 +0000
changeset 1023 e719ee25439d
parent 1022 3d4f1930ed02
child 1024 cca9aeb2934f
Fix potential use of freed memory in the threaded timer system
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 */