diff options
author | Thomas Martitz <kugel@rockbox.org> | 2011-02-18 22:46:01 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2011-02-18 22:46:01 +0000 |
commit | 6d85de341928aef8178465c60122f3cbe76f5dd6 (patch) | |
tree | ff86c384a574ac20d3418c1b904ed4d0de1f6980 /firmware/thread.c | |
parent | 3926c30705cc7235122e2f2e35ab506b53238cdf (diff) | |
download | rockbox-6d85de341928aef8178465c60122f3cbe76f5dd6.tar.gz rockbox-6d85de341928aef8178465c60122f3cbe76f5dd6.zip |
Implement cooperative threads on hosted platforms using C code.
This replaces SDL threads with real cooperative threads, which are less cpu intensive and allow priority scheduling.
The backend for context switching is dependant on the host (sigaltstack/longjmp on Unix, Fibers on Windows).
configure has options to force or disallow SDL threads.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29327 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/thread.c')
-rw-r--r-- | firmware/thread.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/firmware/thread.c b/firmware/thread.c index b71bc1749c..a81f56cdfe 100644 --- a/firmware/thread.c +++ b/firmware/thread.c | |||
@@ -174,10 +174,13 @@ void switch_thread(void) | |||
174 | __attribute__((noinline)); | 174 | __attribute__((noinline)); |
175 | 175 | ||
176 | /**************************************************************************** | 176 | /**************************************************************************** |
177 | * Processor-specific section - include necessary core support | 177 | * Processor/OS-specific section - include necessary core support |
178 | */ | 178 | */ |
179 | #if defined(ANDROID) | 179 | |
180 | #include "thread-android-arm.c" | 180 | #if defined(HAVE_WIN32_FIBER_THREADS) |
181 | #include "thread-win32.c" | ||
182 | #elif defined(HAVE_SIGALTSTACK_THREADS) | ||
183 | #include "thread-unix.c" | ||
181 | #elif defined(CPU_ARM) | 184 | #elif defined(CPU_ARM) |
182 | #include "thread-arm.c" | 185 | #include "thread-arm.c" |
183 | #if defined (CPU_PP) | 186 | #if defined (CPU_PP) |
@@ -2308,6 +2311,9 @@ void init_threads(void) | |||
2308 | thread_exit(); | 2311 | thread_exit(); |
2309 | #endif /* NUM_CORES */ | 2312 | #endif /* NUM_CORES */ |
2310 | } | 2313 | } |
2314 | #ifdef INIT_MAIN_THREAD | ||
2315 | init_main_thread(&thread->context); | ||
2316 | #endif | ||
2311 | } | 2317 | } |
2312 | 2318 | ||
2313 | /* Shared stack scan helper for thread_stack_usage and idle_stack_usage */ | 2319 | /* Shared stack scan helper for thread_stack_usage and idle_stack_usage */ |