let task = get_task_id();
// Expect the weak task service to be alive
assert service.try_send(RegisterWeakTask(task, shutdown_chan));
- unsafe { rust_inc_weak_task_count(); }
+ unsafe { rust_inc_kernel_live_count(); }
do fn&() {
let shutdown_port = swap_unwrap(&mut *shutdown_port);
f(shutdown_port)
}.finally || {
- unsafe { rust_dec_weak_task_count(); }
+ unsafe { rust_dec_kernel_live_count(); }
// Service my have already exited
service.send(UnregisterWeakTask(task));
}
let port = swap_unwrap(&mut *port);
// The weak task service is itself a weak task
debug!("weakening the weak service task");
- unsafe { rust_inc_weak_task_count(); }
+ unsafe { rust_inc_kernel_live_count(); }
run_weak_task_service(port);
}.finally {
debug!("unweakening the weak service task");
- unsafe { rust_dec_weak_task_count(); }
+ unsafe { rust_dec_kernel_live_count(); }
}
}
}
extern {
- unsafe fn rust_inc_weak_task_count();
- unsafe fn rust_dec_weak_task_count();
+ unsafe fn rust_inc_kernel_live_count();
+ unsafe fn rust_dec_kernel_live_count();
}
#[test]
}
extern "C" void
-rust_inc_weak_task_count() {
+rust_inc_kernel_live_count() {
rust_task *task = rust_get_current_task();
- task->kernel->inc_weak_task_count();
+ task->kernel->inc_live_count();
}
extern "C" void
-rust_dec_weak_task_count() {
+rust_dec_kernel_live_count() {
rust_task *task = rust_get_current_task();
- task->kernel->dec_weak_task_count();
+ task->kernel->dec_live_count();
}
//
}
void
-rust_kernel::register_task() {
- KLOG_("Registering task");
+rust_kernel::inc_live_count() {
uintptr_t new_non_weak_tasks = sync::increment(non_weak_tasks);
KLOG_("New non-weak tasks %" PRIdPTR, new_non_weak_tasks);
}
+void
+rust_kernel::dec_live_count() {
+ uintptr_t new_non_weak_tasks = sync::decrement(non_weak_tasks);
+ KLOG_("New non-weak tasks %" PRIdPTR, new_non_weak_tasks);
+ if (new_non_weak_tasks == 0) {
+ begin_shutdown();
+ }
+}
+
void
rust_kernel::allow_scheduler_exit() {
scoped_lock with(sched_lock);
osmain_sched->allow_exit();
}
-void
-rust_kernel::unregister_task() {
- KLOG_("Unregistering task");
- uintptr_t new_non_weak_tasks = sync::decrement(non_weak_tasks);
- KLOG_("New non-weak tasks %" PRIdPTR, new_non_weak_tasks);
- if (new_non_weak_tasks == 0) {
- begin_shutdown();
- }
-}
-
-void
-rust_kernel::inc_weak_task_count() {
- uintptr_t new_non_weak_tasks = sync::decrement(non_weak_tasks);
- KLOG_("New non-weak tasks %" PRIdPTR, new_non_weak_tasks);
- if (new_non_weak_tasks == 0) {
- begin_shutdown();
- }
-}
-
-void
-rust_kernel::dec_weak_task_count() {
- uintptr_t new_non_weak_tasks = sync::increment(non_weak_tasks);
- KLOG_("New non-weak tasks %" PRIdPTR, new_non_weak_tasks);
-}
-
void
rust_kernel::begin_shutdown() {
{
rust_sched_id main_sched_id() { return main_scheduler; }
rust_sched_id osmain_sched_id() { return osmain_scheduler; }
- void register_task();
- void unregister_task();
- void inc_weak_task_count();
- void dec_weak_task_count();
+ void inc_live_count();
+ void dec_live_count();
void register_exit_function(spawn_fn runner, fn_env_pair *f);
};
cur_thread = (thread_no + 1) % max_num_threads;
}
KLOG(kernel, kern, "Creating task %s, on thread %d.", name, thread_no);
- kernel->register_task();
+ kernel->inc_live_count();
rust_sched_launcher *thread = threads[thread_no];
return thread->get_loop()->create_task(spawner, name);
}
need_exit = true;
}
}
- kernel->unregister_task();
+ kernel->dec_live_count();
if (need_exit) {
exit();
}
rust_raw_thread_join_delete
rust_register_exit_function
rust_get_global_data_ptr
-rust_inc_weak_task_count
-rust_dec_weak_task_count
+rust_inc_kernel_live_count
+rust_dec_kernel_live_count
rust_get_exchange_count_ptr