From 4028a099f525c5368aa385283a2e88073ba2b3ea Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 16 Sep 2011 10:49:41 -0700 Subject: [PATCH] Yield after send --- src/rt/rust_builtin.cpp | 1 + src/test/run-pass/send-iloop.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/test/run-pass/send-iloop.rs diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 99e7df606a8a..cf883577f5c4 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -551,6 +551,7 @@ chan_id_send(rust_task *task, type_desc *t, rust_task_id target_task_id, port->remote_chan->send(sptr); } target_task->deref(); + task->yield(); } } diff --git a/src/test/run-pass/send-iloop.rs b/src/test/run-pass/send-iloop.rs new file mode 100644 index 000000000000..6c395e1d190b --- /dev/null +++ b/src/test/run-pass/send-iloop.rs @@ -0,0 +1,28 @@ +// FIXME #937 +// xfail-fast +use std; +import std::task; +import std::comm; +import std::uint; + +fn die() { + fail; +} + +fn iloop() { + task::unsupervise(); + let f = die; + task::spawn(f); + let p = comm::port::<()>(); + let c = comm::chan(p); + while true { + comm::send(c, ()); + } +} + +fn main() { + for each i in uint::range(0u, 16u) { + let f = iloop; + task::spawn(f); + } +} \ No newline at end of file