if (_PR_IS_NATIVE_THREAD(me) || (thread->cpu != me->cpu)) {
if ((_PR_IS_NATIVE_THREAD(me) || (thread->cpu != me->cpu)) && (!thread->md.thr_bound_cpu)) {
_PR_MD_WAKEUP_WAITER(PRThread *thread){    if (thread == NULL) {        /* If thread is NULL, we aren't waking a thread, we're just poking         * idle thread          */        if ( PostQueuedCompletionStatus(_pr_completion_port, 0,             KEY_CVAR, NULL) == FALSE)             return PR_FAILURE;        return PR_SUCCESS;    }    if ( _PR_IS_NATIVE_THREAD(thread) ) {        if (ReleaseSemaphore(thread->md.blocked_sema, 1, NULL) == FALSE)            return PR_FAILURE;        else            return PR_SUCCESS;    } else {        PRThread *me = _PR_MD_CURRENT_THREAD();        /* When a Native thread has to awaken a user thread, it has to poke         * the completion port because all user threads might be idle, and         * thus the CPUs are just waiting for a completion.           *         * XXXMB - can we know when we are truely idle (and not checking          *         the runq)?         */        if (_PR_IS_NATIVE_THREAD(me) || (thread->cpu != me->cpu)) {            /* The thread should not be in any queue */            PR_ASSERT(thread->queueCount == 0);            if ( PostQueuedCompletionStatus(_pr_completion_port, 0,                 KEY_CVAR, &(thread->md.overlapped.overlapped)) == FALSE)                 return PR_FAILURE;        }        return PR_SUCCESS;    }}