diff --git a/src/test/run-pass/crust-stress.rs b/src/test/run-pass/crust-stress.rs new file mode 100644 index 0000000000000000000000000000000000000000..73dac3f48c4d3cb4b1d4ec56ba9130379e1deca1 --- /dev/null +++ b/src/test/run-pass/crust-stress.rs @@ -0,0 +1,28 @@ +// This creates a bunch of yielding tasks that run concurrently +// while holding onto C stacks + +native mod rustrt { + fn rust_dbg_call(cb: *u8, + data: ctypes::uintptr_t) -> ctypes::uintptr_t; +} + +crust fn cb(data: ctypes::uintptr_t) -> ctypes::uintptr_t { + if data == 1u { + data + } else { + task::yield(); + count(data - 1u) + count(data - 1u) + } +} + +fn count(n: uint) -> uint { + rustrt::rust_dbg_call(cb, n) +} + +fn main() { + iter::repeat(100u) {|| + task::spawn {|| + count(5u); + }; + } +} \ No newline at end of file