From de47fcfdf9404d53940099f5e7810bdb2bf37af3 Mon Sep 17 00:00:00 2001 From: Brian Anderson <banderson@mozilla.com> Date: Sat, 31 Mar 2012 22:00:08 -0700 Subject: [PATCH] rt: Extract rust_thread_sched_launcher from rust_sched_launcher --- src/rt/rust_sched_launcher.cpp | 10 ++++++++-- src/rt/rust_sched_launcher.h | 22 ++++++++++++++++------ src/rt/rust_scheduler.cpp | 3 ++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/rt/rust_sched_launcher.cpp b/src/rt/rust_sched_launcher.cpp index ea444b504aa..031f8bba60a 100644 --- a/src/rt/rust_sched_launcher.cpp +++ b/src/rt/rust_sched_launcher.cpp @@ -5,8 +5,14 @@ const size_t SCHED_STACK_SIZE = 1024*100; rust_sched_launcher::rust_sched_launcher(rust_scheduler *sched, rust_srv *srv, int id) - : rust_thread(SCHED_STACK_SIZE), - kernel(sched->kernel), + : kernel(sched->kernel), sched_loop(sched, srv, id), driver(&sched_loop) { } + +rust_thread_sched_launcher::rust_thread_sched_launcher(rust_scheduler *sched, + rust_srv *srv, int id) + : rust_sched_launcher(sched, srv, id), + rust_thread(SCHED_STACK_SIZE) { +} + diff --git a/src/rt/rust_sched_launcher.h b/src/rt/rust_sched_launcher.h index 79a5835efe2..ea35dc27a22 100644 --- a/src/rt/rust_sched_launcher.h +++ b/src/rt/rust_sched_launcher.h @@ -5,23 +5,33 @@ #include "sync/rust_thread.h" #include "rust_sched_driver.h" -class rust_sched_launcher - : public kernel_owned<rust_sched_launcher>, - private rust_thread { +class rust_sched_launcher : public kernel_owned<rust_sched_launcher> { public: rust_kernel *kernel; private: rust_sched_loop sched_loop; + +protected: rust_sched_driver driver; public: rust_sched_launcher(rust_scheduler *sched, rust_srv *srv, int id); - void start() { rust_thread::start(); } - void run() { driver.start_main_loop(); } - void join() { rust_thread::join(); } + virtual void start() = 0; + virtual void run() = 0; + virtual void join() = 0; rust_sched_loop *get_loop() { return &sched_loop; } }; +class rust_thread_sched_launcher + :public rust_sched_launcher, + private rust_thread { +public: + rust_thread_sched_launcher(rust_scheduler *sched, rust_srv *srv, int id); + virtual void start() { rust_thread::start(); } + virtual void run() { driver.start_main_loop(); } + virtual void join() { rust_thread::join(); } +}; + #endif // RUST_SCHED_LAUNCHER_H diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp index 4153972f83a..48f8acd9866 100644 --- a/src/rt/rust_scheduler.cpp +++ b/src/rt/rust_scheduler.cpp @@ -26,7 +26,8 @@ rust_sched_launcher * rust_scheduler::create_task_thread(int id) { rust_srv *srv = this->srv->clone(); rust_sched_launcher *thread = - new (kernel, "rust_sched_launcher") rust_sched_launcher(this, srv, id); + new (kernel, "rust_thread_sched_launcher") + rust_thread_sched_launcher(this, srv, id); KLOG(kernel, kern, "created task thread: " PTR ", id: %d", thread, id); return thread;