aboutsummaryrefslogtreecommitdiff
path: root/src/test/run-pass/preempt.rs
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-06-23 21:03:09 -0700
committerGraydon Hoare <[email protected]>2010-06-23 21:03:09 -0700
commitd6b7c96c3eb29b9244ece0c046d3f372ff432d04 (patch)
treeb425187e232966063ffc2f0d14c04a55d8f004ef /src/test/run-pass/preempt.rs
parentInitial git commit. (diff)
downloadrust-d6b7c96c3eb29b9244ece0c046d3f372ff432d04.tar.xz
rust-d6b7c96c3eb29b9244ece0c046d3f372ff432d04.zip
Populate tree.
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