if (!_PR_IS_NATIVE_THREAD(me) && ((cpu == me->cpu) || (thread->io_suspended))) { PR_ASSERT(!thread->io_suspended ||
if ((!_PR_IS_NATIVE_THREAD(me) && (cpu == me->cpu)) || (thread->md.thr_bound_cpu)) { PR_ASSERT(!thread->md.thr_bound_cpu ||
_PR_AddThreadToRunQ(    PRThread *me,     /* the current thread */    PRThread *thread) /* the local thread to be added to a run queue */{    PRThreadPriority pri = thread->priority;    _PRCPU *cpu = thread->cpu;    PR_ASSERT(!_PR_IS_NATIVE_THREAD(thread));#if defined(WINNT)    /*     * On NT, we can only reliably know that the current CPU     * is not idle.  We add the awakened thread to the run     * queue of its CPU if its CPU is the current CPU.     * For any other CPU, we don't really know whether it     * is busy or idle.  So in all other cases, we just     * "post" the awakened thread to the IO completion port     * for the next idle CPU to execute (this is done in     * _PR_MD_WAKEUP_WAITER).	 * Threads with a suspended I/O operation remain bound to	 * the same cpu until I/O is cancelled     */    if (!_PR_IS_NATIVE_THREAD(me) && ((cpu == me->cpu) ||					(thread->io_suspended))) {		PR_ASSERT(!thread->io_suspended ||							(thread->md.thr_bound_cpu == cpu));        _PR_RUNQ_LOCK(cpu);        _PR_ADD_RUNQ(thread, cpu, pri);        _PR_RUNQ_UNLOCK(cpu);    }#else    _PR_RUNQ_LOCK(cpu);    _PR_ADD_RUNQ(thread, cpu, pri);    _PR_RUNQ_UNLOCK(cpu);    if (!_PR_IS_NATIVE_THREAD(me) && (cpu == me->cpu)) {        if (pri > me->priority) {            _PR_SET_RESCHED_FLAG();        }    }#endif}