+
+
+void
+thread_yield_internal(
+ mach_msg_timeout_t ms)
+{
+ processor_t myprocessor;
+
+ disable_preemption();
+ myprocessor = current_processor();
+ if (myprocessor->runq.count == 0 && rt_runq.count == 0) {
+ mp_enable_preemption();
+
+ return;
+ }
+ enable_preemption();
+
+ thread_depress_ms(ms);
+
+ thread_block_reason(THREAD_CONTINUE_NULL, NULL, AST_YIELD);
+
+ thread_depress_abort_internal(current_thread());
+}
+