diff --git a/src/system/kernel/scheduler.cpp b/src/system/kernel/scheduler.cpp index 85f7c1d55e..06901c7390 100644 --- a/src/system/kernel/scheduler.cpp +++ b/src/system/kernel/scheduler.cpp @@ -189,12 +189,14 @@ scheduler_reschedule(void) } else { // select next thread from the run queue while (nextThread && nextThread->priority > B_IDLE_PRIORITY) { +#if 0 if (oldThread == nextThread && nextThread->was_yielded) { // ignore threads that called thread_yield() once nextThread->was_yielded = false; prevThread = nextThread; nextThread = nextThread->queue_next; } +#endif // always extract real time threads if (nextThread->priority >= B_FIRST_REAL_TIME_PRIORITY) @@ -205,7 +207,7 @@ scheduler_reschedule(void) break; // skip normal threads sometimes (roughly 16%) - if (_rand() > 0x1500) + if (_rand() > 0x2000) break; // skip until next lower priority diff --git a/src/system/kernel/thread.c b/src/system/kernel/thread.c index 336a26cb9a..b7c1802bd8 100644 --- a/src/system/kernel/thread.c +++ b/src/system/kernel/thread.c @@ -1307,7 +1307,8 @@ thread_yield(void) GRAB_THREAD_LOCK(); // mark the thread as yielded, so it will not be scheduled next - thread->was_yielded = true; + //thread->was_yielded = true; + thread->next_priority = B_LOWEST_ACTIVE_PRIORITY; scheduler_reschedule(); RELEASE_THREAD_LOCK();