diff --git a/src/libcore/private/weak_task.rs b/src/libcore/private/weak_task.rs index 9d57cd5a466ac..7b9dfd9b457c9 100644 --- a/src/libcore/private/weak_task.rs +++ b/src/libcore/private/weak_task.rs @@ -40,12 +40,12 @@ pub unsafe fn weaken_task(f: &fn(Port)) { 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_dec_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_inc_kernel_live_count(); } // Service my have already exited service.send(UnregisterWeakTask(task)); } @@ -78,11 +78,11 @@ fn create_global_service() -> ~WeakTaskService { 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_dec_kernel_live_count(); } run_weak_task_service(port); }.finally { debug!("unweakening the weak service task"); - unsafe { rust_dec_weak_task_count(); } + unsafe { rust_inc_kernel_live_count(); } } } @@ -126,8 +126,8 @@ fn run_weak_task_service(port: Port) { } 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] diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 32f2c4ebde2ac..df54e47770bca 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -945,15 +945,15 @@ rust_get_global_data_ptr() { } 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(); } // diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index e0494c9300bc3..6b7a82414161c 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -291,12 +291,20 @@ rust_kernel::set_exit_status(int code) { } 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); @@ -315,31 +323,6 @@ rust_kernel::allow_scheduler_exit() { 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() { { diff --git a/src/rt/rust_kernel.h b/src/rt/rust_kernel.h index 11af02dace4a0..01ebf5ab57b95 100644 --- a/src/rt/rust_kernel.h +++ b/src/rt/rust_kernel.h @@ -160,10 +160,8 @@ class rust_kernel { 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); }; diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp index 22dae047e55df..e3a5d9db91ffa 100644 --- a/src/rt/rust_scheduler.cpp +++ b/src/rt/rust_scheduler.cpp @@ -123,7 +123,7 @@ rust_scheduler::create_task(rust_task *spawner, const char *name) { 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); } @@ -138,7 +138,7 @@ rust_scheduler::release_task() { need_exit = true; } } - kernel->unregister_task(); + kernel->dec_live_count(); if (need_exit) { exit(); } diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 9076670392a85..7ab07df0bfef1 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -189,6 +189,6 @@ rust_raw_thread_start 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