diff --git a/sched.c b/sched.c index f46a368..f69df55 100644 --- a/sched.c +++ b/sched.c @@ -67,6 +67,7 @@ unsigned long long _st_stat_sched_s = 0; unsigned long long _st_stat_thread_run = 0; unsigned long long _st_stat_thread_idle = 0; unsigned long long _st_stat_thread_yield = 0; +unsigned long long _st_stat_thread_yield2 = 0; #endif @@ -559,18 +560,22 @@ void st_thread_yield() { _st_thread_t *me = _ST_CURRENT_THREAD(); + #ifdef DEBUG + ++_st_stat_thread_yield; + #endif + + /* Check sleep queue for expired threads */ + _st_vp_check_clock(); + // If not thread in RunQ to yield to, ignore and continue to run. if (_ST_RUNQ.next == &_ST_RUNQ) { return; } #ifdef DEBUG - ++_st_stat_thread_yield; + ++_st_stat_thread_yield2; #endif - /* Check sleep queue for expired threads */ - _st_vp_check_clock(); - // Append thread to the tail of RunQ, we will back after all threads executed. me->state = _ST_ST_RUNNABLE; _ST_ADD_RUNQ(me);