aboutsummaryrefslogtreecommitdiff
path: root/src/test/run-pass/preempt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/run-pass/preempt.rs')
-rw-r--r--src/test/run-pass/preempt.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/run-pass/preempt.rs b/src/test/run-pass/preempt.rs
new file mode 100644
index 00000000..00fc29ca
--- /dev/null
+++ b/src/test/run-pass/preempt.rs
@@ -0,0 +1,26 @@
+// This checks that preemption works.
+
+io fn starve_main(chan[int] alive) {
+ log "signalling main";
+ alive <| 1;
+ log "starving main";
+ let int i = 0;
+ while (true) {
+ i += 1;
+ }
+}
+
+io fn main() {
+ let port[int] alive = port();
+ log "main started";
+ let task s = spawn starve_main(chan(alive));
+ let int i;
+ log "main waiting for alive signal";
+ i <- alive;
+ log "main got alive signal";
+ while (i < 1000) {
+ log "main iterated";
+ i += 1;
+ }
+ log "main completed";
+} \ No newline at end of file