core: Allocate threads on demand, not on scheduler startup

API change: rust_kernel::create_scheduler() or
rust_scheduler::rust_scheduler() respecitevly now take ownership of the
launch factory argument, it is needed to create new threads on demand.

Also renames rustrt::sched_threads() to rustrt::rust_sched_threads() for
consistency. Added rustrt::rust_max_sched_threads() to return the
maximal number of scheduled threads of the current scheduler.

Fixes #3493.
This commit is contained in:
Philipp Brüschweiler
2012-09-14 15:01:17 +02:00
committed by Brian Anderson
parent 35a9353774
commit 68e755b1c2
8 changed files with 102 additions and 48 deletions

View File

@@ -31,9 +31,10 @@ rust_kernel::rust_kernel(rust_env *env) :
// Create the single threaded scheduler that will run on the platform's
// main thread
rust_manual_sched_launcher_factory launchfac;
osmain_scheduler = create_scheduler(&launchfac, 1, false);
osmain_driver = launchfac.get_driver();
rust_manual_sched_launcher_factory *launchfac =
new rust_manual_sched_launcher_factory();
osmain_scheduler = create_scheduler(launchfac, 1, false);
osmain_driver = launchfac->get_driver();
sched_reaper.start();
}
@@ -79,8 +80,9 @@ void rust_kernel::free(void *mem) {
rust_sched_id
rust_kernel::create_scheduler(size_t num_threads) {
rust_thread_sched_launcher_factory launchfac;
return create_scheduler(&launchfac, num_threads, true);
rust_thread_sched_launcher_factory *launchfac =
new rust_thread_sched_launcher_factory();
return create_scheduler(launchfac, num_threads, true);
}
rust_sched_id