diff options
| author | Ben Blum <bblum@andrew.cmu.edu> | 2012-07-20 18:06:17 -0400 |
|---|---|---|
| committer | Ben Blum <bblum@andrew.cmu.edu> | 2012-07-20 19:23:19 -0400 |
| commit | 5bb4a12900969b3250c490a5e0682c658fe65ba8 (patch) | |
| tree | 9fee7318849691fd35658af7363dfdd8d433b0c9 /src/rt/rust_scheduler.cpp | |
| parent | f55999fd7a03b4f876e69e94e491d3c30bf0c076 (diff) | |
| download | rust-5bb4a12900969b3250c490a5e0682c658fe65ba8.tar.gz rust-5bb4a12900969b3250c490a5e0682c658fe65ba8.zip | |
[1/4 for #2365, #2671] Fix create/kill race with schedulers and tasks during rust_kernel::fail
Diffstat (limited to 'src/rt/rust_scheduler.cpp')
| -rw-r--r-- | src/rt/rust_scheduler.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp index 1f0b16a1d58..dc662b009ac 100644 --- a/src/rt/rust_scheduler.cpp +++ b/src/rt/rust_scheduler.cpp @@ -9,6 +9,7 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel, size_t num_threads, rust_sched_id id, bool allow_exit, + bool killed, rust_sched_launcher_factory *launchfac) : kernel(kernel), live_threads(num_threads), @@ -18,7 +19,7 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel, num_threads(num_threads), id(id) { - create_task_threads(launchfac); + create_task_threads(launchfac, killed); } rust_scheduler::~rust_scheduler() { @@ -27,8 +28,8 @@ rust_scheduler::~rust_scheduler() { rust_sched_launcher * rust_scheduler::create_task_thread(rust_sched_launcher_factory *launchfac, - int id) { - rust_sched_launcher *thread = launchfac->create(this, id); + int id, bool killed) { + rust_sched_launcher *thread = launchfac->create(this, id, killed); KLOG(kernel, kern, "created task thread: " PTR ", id: %d", thread, id); return thread; @@ -41,11 +42,12 @@ rust_scheduler::destroy_task_thread(rust_sched_launcher *thread) { } void -rust_scheduler::create_task_threads(rust_sched_launcher_factory *launchfac) { +rust_scheduler::create_task_threads(rust_sched_launcher_factory *launchfac, + bool killed) { KLOG(kernel, kern, "Using %d scheduler threads.", num_threads); for(size_t i = 0; i < num_threads; ++i) { - threads.push(create_task_thread(launchfac, i)); + threads.push(create_task_thread(launchfac, i, killed)); } } |
