diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2008-02-02 03:00:34 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2008-02-02 03:00:34 +0000 |
| commit | 537b78b216e2d7d7694cf887bda1ad5587c4d5d2 (patch) | |
| tree | 626479d6b82499584a952985764b7ccab7258985 | |
| parent | d08af61394bb9d6c3cbb614f790091de44cbfd1b (diff) | |
| download | rockbox-537b78b216e2d7d7694cf887bda1ad5587c4d5d2.zip rockbox-537b78b216e2d7d7694cf887bda1ad5587c4d5d2.tar.gz rockbox-537b78b216e2d7d7694cf887bda1ad5587c4d5d2.tar.bz2 rockbox-537b78b216e2d7d7694cf887bda1ad5587c4d5d2.tar.xz | |
Fix a minor ;) problem that would keep other threads from running during priority_yield calls unless they had aged too much. Basically it operates in the manner of the original implementation. _May_ help 5.5g buffering problems so do test that.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16197 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/thread.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/firmware/thread.c b/firmware/thread.c index ca6c640..fdef2cd 100644 --- a/firmware/thread.c +++ b/firmware/thread.c @@ -1615,12 +1615,13 @@ void switch_thread(struct thread_entry *old) * got CPU time. */ for (;;) { - int priority = MIN(thread->priority, thread->priority_x); + int priority = thread->priority; if (priority < cores[core].highest_priority) cores[core].highest_priority = priority; if (priority == cores[core].highest_priority || + thread->priority_x < cores[core].highest_priority || (current_tick - thread->last_run > priority * 8)) { cores[core].running = thread; @@ -2402,7 +2403,6 @@ void priority_yield(void) thread->priority_x = HIGHEST_PRIORITY; switch_thread(NULL); thread->priority_x = LOWEST_PRIORITY; - cores[core].highest_priority = LOWEST_PRIORITY; } #endif /* HAVE_PRIORITY_SCHEDULING */ |