reduce overhead of checking sleeping thread on every scheduling iteration

svn: r5954
This commit is contained in:
Matthew Flatt 2007-04-16 10:59:28 +00:00
parent 8bc617aa51
commit 29b6104ead

View File

@ -3615,6 +3615,8 @@ void scheme_thread_block(float sleep_time)
check_scheduled_kills(); check_scheduled_kills();
if (!do_atomic && (sleep_end >= 0.0)) { if (!do_atomic && (sleep_end >= 0.0)) {
double msecs = 0.0;
/* Find the next process. Skip processes that are definitely /* Find the next process. Skip processes that are definitely
blocked. */ blocked. */
@ -3683,9 +3685,12 @@ void scheme_thread_block(float sleep_time)
if (f(next->blocker, &sinfo)) if (f(next->blocker, &sinfo))
break; break;
next->sleep_end = sinfo.sleep_end; next->sleep_end = sinfo.sleep_end;
msecs = 0.0; /* that could have taken a while */
} }
} else if (next->block_descriptor == SLEEP_BLOCKED) { } else if (next->block_descriptor == SLEEP_BLOCKED) {
if (next->sleep_end <= scheme_get_inexact_milliseconds()) if (!msecs)
msecs = scheme_get_inexact_milliseconds();
if (next->sleep_end <= msecs)
break; break;
} else } else
break; break;