Skip to content

Commit 7c1be23

Browse files
committed
rt: Introduce rust_sched_launcher_factory. Sorry, I need one
1 parent fb528dd commit 7c1be23

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

src/rt/rust_sched_launcher.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,10 @@ rust_manual_sched_launcher::rust_manual_sched_launcher(rust_scheduler *sched,
2020
rust_srv *srv, int id)
2121
: rust_sched_launcher(sched, srv, id) {
2222
}
23+
24+
rust_sched_launcher *
25+
rust_thread_sched_launcher_factory::create(rust_scheduler *sched, int id) {
26+
rust_srv *srv = sched->srv->clone();
27+
return new(sched->kernel, "rust_thread_sched_launcher")
28+
rust_thread_sched_launcher(sched, srv, id);
29+
}

src/rt/rust_sched_launcher.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,17 @@ class rust_manual_sched_launcher : public rust_sched_launcher {
4242
void start_main_loop() { driver.start_main_loop(); }
4343
};
4444

45+
class rust_sched_launcher_factory {
46+
public:
47+
virtual ~rust_sched_launcher_factory() { }
48+
virtual rust_sched_launcher *
49+
create(rust_scheduler *sched, int id) = 0;
50+
};
51+
52+
class rust_thread_sched_launcher_factory
53+
: public rust_sched_launcher_factory {
54+
public:
55+
virtual rust_sched_launcher *create(rust_scheduler *sched, int id);
56+
};
57+
4558
#endif // RUST_SCHED_LAUNCHER_H

src/rt/rust_scheduler.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,18 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel,
1717
num_threads(num_threads),
1818
id(id)
1919
{
20-
create_task_threads();
20+
rust_thread_sched_launcher_factory launchfac;
21+
create_task_threads(&launchfac);
2122
}
2223

2324
rust_scheduler::~rust_scheduler() {
2425
destroy_task_threads();
2526
}
2627

2728
rust_sched_launcher *
28-
rust_scheduler::create_task_thread(int id) {
29-
rust_srv *srv = this->srv->clone();
30-
rust_sched_launcher *thread =
31-
new (kernel, "rust_thread_sched_launcher")
32-
rust_thread_sched_launcher(this, srv, id);
29+
rust_scheduler::create_task_thread(rust_sched_launcher_factory *launchfac,
30+
int id) {
31+
rust_sched_launcher *thread = launchfac->create(this, id);
3332
KLOG(kernel, kern, "created task thread: " PTR ", id: %d",
3433
thread, id);
3534
return thread;
@@ -44,11 +43,11 @@ rust_scheduler::destroy_task_thread(rust_sched_launcher *thread) {
4443
}
4544

4645
void
47-
rust_scheduler::create_task_threads() {
46+
rust_scheduler::create_task_threads(rust_sched_launcher_factory *launchfac) {
4847
KLOG(kernel, kern, "Using %d scheduler threads.", num_threads);
4948

5049
for(size_t i = 0; i < num_threads; ++i) {
51-
threads.push(create_task_thread(i));
50+
threads.push(create_task_thread(launchfac, i));
5251
}
5352
}
5453

src/rt/rust_scheduler.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "rust_internal.h"
55

66
class rust_sched_launcher;
7+
class rust_sched_launcher_factory;
78

89
class rust_scheduler : public kernel_owned<rust_scheduler> {
910
// FIXME: Make these private
@@ -26,10 +27,11 @@ class rust_scheduler : public kernel_owned<rust_scheduler> {
2627

2728
rust_sched_id id;
2829

29-
void create_task_threads();
30+
void create_task_threads(rust_sched_launcher_factory *launchfac);
3031
void destroy_task_threads();
3132

32-
rust_sched_launcher *create_task_thread(int id);
33+
rust_sched_launcher *
34+
create_task_thread(rust_sched_launcher_factory *launchfac, int id);
3335
void destroy_task_thread(rust_sched_launcher *thread);
3436

3537
void exit();

0 commit comments

Comments
 (0)