diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-06-22 01:09:06 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-06-24 17:07:03 -0700 |
| commit | 5e7c5d6c3d532e7b536b76044cd47b72b8eadaad (patch) | |
| tree | 4293df31a4276cc3d477ece661fe30debc7da63a /src/libstd/rt/task.rs | |
| parent | a09972db3545344048b90e90d1f1821b621a38b9 (diff) | |
| download | rust-5e7c5d6c3d532e7b536b76044cd47b72b8eadaad.tar.gz rust-5e7c5d6c3d532e7b536b76044cd47b72b8eadaad.zip | |
std: Make box annihilator work with newsched
Diffstat (limited to 'src/libstd/rt/task.rs')
| -rw-r--r-- | src/libstd/rt/task.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libstd/rt/task.rs b/src/libstd/rt/task.rs index 833f25b253c..68f7eb659b0 100644 --- a/src/libstd/rt/task.rs +++ b/src/libstd/rt/task.rs @@ -15,6 +15,7 @@ use borrow; use cast::transmute; +use cleanup; use libc::{c_void, uintptr_t}; use ptr; use prelude::*; @@ -118,6 +119,10 @@ impl Task { } _ => () } + + // Destroy remaining boxes + unsafe { cleanup::annihilate(); } + self.destroyed = true; } } @@ -269,4 +274,20 @@ mod test { assert!(res.is_err()); } } + + #[test] + fn heap_cycles() { + use option::{Option, Some, None}; + + do run_in_newsched_task { + struct List { + next: Option<@mut List>, + } + + let a = @mut List { next: None }; + let b = @mut List { next: Some(a) }; + + a.next = Some(b); + } + } } |
