Here is an updated version of the Destroy_Thread function from kthread.c You should also update function Reaper so to delete the Disable_Interrupts and Enable_Interrupts in the body of the while loop along with the call to Yield().
// Destroy given thread. // Called with interrupts enabled. static void Destroy_Thread( struct Kernel_Thread* kthread ) { struct threadItem *curr, *lag; KASSERT(!Interrupts_Enabled()); // Detach from the thread's user context (if any). Detach_User_Context( kthread ); 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; } } // Dispose of the thread's memory. Free_Page( kthread->stackPage ); Free_Page( kthread ); KASSERT(curr); }