diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-08-10 12:57:53 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-08-10 13:02:31 -0700 |
| commit | 0cd607bcbdc70d3d7ccefd5faf830cc8e5d68c86 (patch) | |
| tree | 0e531d1593e88a8dd3e3f783d16257568652cf93 /src/rt/rust_kernel.cpp | |
| parent | f6ad0514087f985ce1c1aad126b28b8e17e2e005 (diff) | |
| download | rust-0cd607bcbdc70d3d7ccefd5faf830cc8e5d68c86.tar.gz rust-0cd607bcbdc70d3d7ccefd5faf830cc8e5d68c86.zip | |
rt: Shutdown gracefully on failure
When the kernel fails, kill all tasks and wait for the schedulers to stop instead of just exiting. I'm sure there are tons of lurking issues here but this is enough to fail without leaking (at least in the absence of cleanups).
Diffstat (limited to 'src/rt/rust_kernel.cpp')
| -rw-r--r-- | src/rt/rust_kernel.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index 4197f5dea89..89c06885683 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -134,6 +134,14 @@ int rust_kernel::start_task_threads() return rval; } +void +rust_kernel::fail() { + for(size_t i = 0; i < num_threads; ++i) { + rust_scheduler *thread = threads[i]; + thread->kill_all_tasks(); + } +} + rust_task_id rust_kernel::create_task(rust_task *spawner, const char *name) { rust_scheduler *thread = threads[rand(&rctx) % num_threads]; |
