// Destroy given thread.
// Called with interrupts enabled.
static void Destroy_Thread( struct Kernel_Thread* kthread )
{
    struct threadItem *curr, *lag;

    KASSERT(!Interrupts_Enabled());

    for (lag=NULL, curr= allThreads; curr; curr=curr->next) {
        if (curr->thread == kthread) {
	    if (curr == allThreads) {
		KASSERT(lag == NULL);
		allThreads = curr->next;
	    } else {
		KASSERT(lag->next == curr);
		lag->next = curr->next;
	    }
	    Free(curr);
	    break;
	} else {
	    lag = curr;
        }
    }

    KASSERT(curr);

    // Dispose of the thread's memory.
    Free_Page( kthread->stackPage );
    Free_Page( kthread );
}
