#include #include #include #include "thread.h" #include "core.h" __noreturn __exit_thread(void) { struct thread *curr = current(); cli(); /* Remove from the linked list */ curr->list.prev->next = curr->list.next; curr->list.next->prev = curr->list.prev; /* Free allocated stacks (note: free(NULL) is permitted and safe). */ free(curr->stack); free(curr->rmstack); /* * Note: __schedule() can explictly handle the case where * curr isn't part of the linked list anymore, as long as * curr->list.next is still valid. */ __schedule(); /* We should never get here */ kaboom(); }