about summary refs log tree commit diff
path: root/src/rt/rust_sched_loop.cpp
diff options
context:
space:
mode:
authorChris Peterson <cpeterson@mozilla.com>2013-02-14 01:18:16 -0800
committerChris Peterson <cpeterson@mozilla.com>2013-02-14 22:35:40 -0800
commit9a76d718c709da7d69d3533e1b2019a768343af5 (patch)
tree9a7d0ce36a00e6b07fb45bd3c599ce0bb9784db9 /src/rt/rust_sched_loop.cpp
parent9a78dc93db551f325b3b3d90540de6ebe7873b4b (diff)
downloadrust-9a76d718c709da7d69d3533e1b2019a768343af5.tar.gz
rust-9a76d718c709da7d69d3533e1b2019a768343af5.zip
don't deplete RNG entropy when there is only one runnable task
Diffstat (limited to 'src/rt/rust_sched_loop.cpp')
-rw-r--r--src/rt/rust_sched_loop.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/rt/rust_sched_loop.cpp b/src/rt/rust_sched_loop.cpp
index 01c377356a3..7143bf88d46 100644
--- a/src/rt/rust_sched_loop.cpp
+++ b/src/rt/rust_sched_loop.cpp
@@ -150,10 +150,10 @@ rust_sched_loop::release_task(rust_task *task) {
 rust_task *
 rust_sched_loop::schedule_task() {
     lock.must_have_lock();
-    if (running_tasks.length() > 0) {
-        size_t k = rng_gen_u32(kernel, &rng);
-        size_t i = k % running_tasks.length();
-        return (rust_task *)running_tasks[i];
+    size_t tasks = running_tasks.length();
+    if (tasks > 0) {
+        size_t i = (tasks > 1) ? (rng_gen_u32(kernel, &rng) % tasks) : 0;
+        return running_tasks[i];
     }
     return NULL;
 }