diff --git a/src/rt/rust_sched_launcher.cpp b/src/rt/rust_sched_launcher.cpp index e1b0651cf9d..dabae31f5b6 100644 --- a/src/rt/rust_sched_launcher.cpp +++ b/src/rt/rust_sched_launcher.cpp @@ -27,3 +27,11 @@ rust_thread_sched_launcher_factory::create(rust_scheduler *sched, int id) { return new(sched->kernel, "rust_thread_sched_launcher") rust_thread_sched_launcher(sched, srv, id); } + +rust_sched_launcher * +rust_manual_sched_launcher_factory::create(rust_scheduler *sched, int id) { + assert(launcher == NULL && "I can only track one sched_launcher"); + rust_srv *srv = sched->srv->clone(); + return new(sched->kernel, "rust_manual_sched_launcher") + rust_manual_sched_launcher(sched, srv, id); +} diff --git a/src/rt/rust_sched_launcher.h b/src/rt/rust_sched_launcher.h index 7b5dc719424..a68c1f500d6 100644 --- a/src/rt/rust_sched_launcher.h +++ b/src/rt/rust_sched_launcher.h @@ -55,4 +55,14 @@ public: virtual rust_sched_launcher *create(rust_scheduler *sched, int id); }; +class rust_manual_sched_launcher_factory + : public rust_sched_launcher_factory { +private: + rust_manual_sched_launcher *launcher; +public: + rust_manual_sched_launcher_factory() : launcher(NULL) { } + virtual rust_sched_launcher *create(rust_scheduler *sched, int id); + rust_manual_sched_launcher *get_launcher() { return launcher; } +}; + #endif // RUST_SCHED_LAUNCHER_H