From 7c1be236a524980b65b01a327e2c55feb6295a52 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 1 Apr 2012 17:22:24 -0700 Subject: [PATCH] rt: Introduce rust_sched_launcher_factory. Sorry, I need one --- src/rt/rust_sched_launcher.cpp | 7 +++++++ src/rt/rust_sched_launcher.h | 13 +++++++++++++ src/rt/rust_scheduler.cpp | 15 +++++++-------- src/rt/rust_scheduler.h | 6 ++++-- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/rt/rust_sched_launcher.cpp b/src/rt/rust_sched_launcher.cpp index b9c1f87f9d39..e1b0651cf9df 100644 --- a/src/rt/rust_sched_launcher.cpp +++ b/src/rt/rust_sched_launcher.cpp @@ -20,3 +20,10 @@ rust_manual_sched_launcher::rust_manual_sched_launcher(rust_scheduler *sched, rust_srv *srv, int id) : rust_sched_launcher(sched, srv, id) { } + +rust_sched_launcher * +rust_thread_sched_launcher_factory::create(rust_scheduler *sched, int id) { + rust_srv *srv = sched->srv->clone(); + return new(sched->kernel, "rust_thread_sched_launcher") + rust_thread_sched_launcher(sched, srv, id); +} diff --git a/src/rt/rust_sched_launcher.h b/src/rt/rust_sched_launcher.h index 7f3e0ed9f1cf..7b5dc7194241 100644 --- a/src/rt/rust_sched_launcher.h +++ b/src/rt/rust_sched_launcher.h @@ -42,4 +42,17 @@ public: void start_main_loop() { driver.start_main_loop(); } }; +class rust_sched_launcher_factory { +public: + virtual ~rust_sched_launcher_factory() { } + virtual rust_sched_launcher * + create(rust_scheduler *sched, int id) = 0; +}; + +class rust_thread_sched_launcher_factory + : public rust_sched_launcher_factory { +public: + virtual rust_sched_launcher *create(rust_scheduler *sched, int id); +}; + #endif // RUST_SCHED_LAUNCHER_H diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp index 57b166208f9a..82eac1b1c93b 100644 --- a/src/rt/rust_scheduler.cpp +++ b/src/rt/rust_scheduler.cpp @@ -17,7 +17,8 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel, num_threads(num_threads), id(id) { - create_task_threads(); + rust_thread_sched_launcher_factory launchfac; + create_task_threads(&launchfac); } rust_scheduler::~rust_scheduler() { @@ -25,11 +26,9 @@ rust_scheduler::~rust_scheduler() { } rust_sched_launcher * -rust_scheduler::create_task_thread(int id) { - rust_srv *srv = this->srv->clone(); - rust_sched_launcher *thread = - new (kernel, "rust_thread_sched_launcher") - rust_thread_sched_launcher(this, srv, id); +rust_scheduler::create_task_thread(rust_sched_launcher_factory *launchfac, + int id) { + rust_sched_launcher *thread = launchfac->create(this, id); KLOG(kernel, kern, "created task thread: " PTR ", id: %d", thread, id); return thread; @@ -44,11 +43,11 @@ rust_scheduler::destroy_task_thread(rust_sched_launcher *thread) { } void -rust_scheduler::create_task_threads() { +rust_scheduler::create_task_threads(rust_sched_launcher_factory *launchfac) { KLOG(kernel, kern, "Using %d scheduler threads.", num_threads); for(size_t i = 0; i < num_threads; ++i) { - threads.push(create_task_thread(i)); + threads.push(create_task_thread(launchfac, i)); } } diff --git a/src/rt/rust_scheduler.h b/src/rt/rust_scheduler.h index 48a33c52ef68..132fa9e60892 100644 --- a/src/rt/rust_scheduler.h +++ b/src/rt/rust_scheduler.h @@ -4,6 +4,7 @@ #include "rust_internal.h" class rust_sched_launcher; +class rust_sched_launcher_factory; class rust_scheduler : public kernel_owned { // FIXME: Make these private @@ -26,10 +27,11 @@ private: rust_sched_id id; - void create_task_threads(); + void create_task_threads(rust_sched_launcher_factory *launchfac); void destroy_task_threads(); - rust_sched_launcher *create_task_thread(int id); + rust_sched_launcher * + create_task_thread(rust_sched_launcher_factory *launchfac, int id); void destroy_task_thread(rust_sched_launcher *thread); void exit();