From 3a45faa6a8b12cd7a798f488c2fc9bc60327f5cd Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sun, 9 Sep 2007 08:28:42 +0000 Subject: More Simulator tweaking. Back to the counter but with 0 delay. Forget the semaphore; it makes for too much kernel thread yielding. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14649 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/sdl/thread-sdl.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) (limited to 'uisimulator') diff --git a/uisimulator/sdl/thread-sdl.c b/uisimulator/sdl/thread-sdl.c index 8769b5d84f..d146cfb64b 100644 --- a/uisimulator/sdl/thread-sdl.c +++ b/uisimulator/sdl/thread-sdl.c @@ -45,7 +45,6 @@ static char __name[32]; struct thread_entry threads[MAXTHREADS]; /* Thread entries as in core */ static SDL_mutex *m; -static SDL_sem *s; static struct thread_entry *running; extern long start_tick; @@ -60,9 +59,7 @@ void kill_sim_threads(void) if (thread->context.t != NULL) { SDL_LockMutex(m); - if (thread->statearg == STATE_RUNNING) - SDL_SemPost(s); - else + if (thread->statearg != STATE_RUNNING) SDL_CondSignal(thread->context.c); SDL_Delay(10); SDL_KillThread(thread->context.t); @@ -70,7 +67,6 @@ void kill_sim_threads(void) } } SDL_DestroyMutex(m); - SDL_DestroySemaphore(s); } static int find_empty_thread_slot(void) @@ -144,19 +140,20 @@ void thread_sdl_unlock(void) void switch_thread(bool save_context, struct thread_entry **blocked_list) { + static int counter = 0; struct thread_entry *current = running; SDL_UnlockMutex(m); - SDL_SemWait(s); - - SDL_Delay(0); + if (counter++ >= 50) + { + SDL_Delay(0); + counter = 0; + } SDL_LockMutex(m); running = current; - SDL_SemPost(s); - (void)save_context; (void)blocked_list; } @@ -299,7 +296,6 @@ void init_threads(void) int slot; m = SDL_CreateMutex(); - s = SDL_CreateSemaphore(0); memset(threads, 0, sizeof(threads)); @@ -324,10 +320,6 @@ void init_threads(void) if (SDL_LockMutex(m) == -1) { THREAD_PANICF("Couldn't lock mutex\n"); } - - if (SDL_SemPost(s) == -1) { - THREAD_PANICF("Couldn't post to semaphore\n"); - } } void remove_thread(struct thread_entry *thread) @@ -347,9 +339,7 @@ void remove_thread(struct thread_entry *thread) if (thread != current) { - if (thread->statearg == STATE_RUNNING) - SDL_SemPost(s); - else + if (thread->statearg != STATE_RUNNING) SDL_CondSignal(c); } -- cgit v1.2.3