Exemple #1
0
void
__ssx_schedule(void)
{
    __ssx_next_priority = __ssx_thread_queue_min(&__ssx_run_queue);
    __ssx_next_thread = __ssx_priority_map[__ssx_next_priority];

    if ((__ssx_next_thread == 0) ||
        (__ssx_next_thread != __ssx_current_thread))
    {

        if (__ssx_kernel_mode_thread())
        {
            if (__ssx_kernel_context_thread())
            {
                if (__ssx_current_thread != 0)
                {
                    __ssx_switch();
                }
                else
                {
                    __ssx_next_thread_resume();
                }
            }
            else
            {
                __ssx_delayed_switch = 1;
            }
        }
    }
}
Exemple #2
0
int
ssx_start_threads(void)
{
    if (SSX_ERROR_CHECK_API) {
        SSX_ERROR_IF(__ssx_kernel_mode_thread(), SSX_ILLEGAL_CONTEXT_THREAD);
    }

    __ssx_call_ssx_start_threads();

    return 0;
}