From f6f945fed5c8d1061d80b444331910df29afa392 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Fri, 24 Jun 2011 16:50:06 -0700 Subject: Moved thread management to rust_kernel. --- src/rt/rust_kernel.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/rt/rust_kernel.cpp') diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index 9af5f9e2b41..5e495b8c822 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -224,6 +224,37 @@ rust_kernel::signal_kernel_lock() { _kernel_lock.unlock(); } +int rust_kernel::start_task_threads(int num_threads) +{ + rust_task_thread *thread = NULL; + + // -1, because this thread will also be a thread. + for(int i = 0; i < num_threads - 1; ++i) { + thread = new rust_task_thread(i + 1, this); + thread->start(); + threads.push(thread); + } + + dom->start_main_loop(0); + + while(threads.pop(&thread)) { + thread->join(); + delete thread; + } + + return dom->rval; +} + +rust_task_thread::rust_task_thread(int id, rust_kernel *owner) + : id(id), owner(owner) +{ +} + +void rust_task_thread::run() +{ + owner->dom->start_main_loop(id); +} + // // Local Variables: // mode: C++ -- cgit 1.4.1-3-g733a5