rt: Introduce rust_sched_launcher_factory. Sorry, I need one
This commit is contained in:
parent
fb528dd7d6
commit
7c1be236a5
4 changed files with 31 additions and 10 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "rust_internal.h"
|
||||
|
||||
class rust_sched_launcher;
|
||||
class rust_sched_launcher_factory;
|
||||
|
||||
class rust_scheduler : public kernel_owned<rust_scheduler> {
|
||||
// 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();
|
||||
|
|
Loading…
Add table
Reference in a new issue