X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fthread.c;fp=src%2Fthreads%2Fthread.c;h=16b8c8b692e8664b81bab789eb3eeb946e38f3b7;hb=d07d499dd6655d15b274bb7713138dc9641a1fdb;hp=01e8ea42919913a8c5219221c01f52a38f5f1d3e;hpb=61e430fe8ea929b79dfd992bfbecb651a9d6457e;p=pintos-anon diff --git a/src/threads/thread.c b/src/threads/thread.c index 01e8ea4..16b8c8b 100644 --- a/src/threads/thread.c +++ b/src/threads/thread.c @@ -483,12 +483,13 @@ schedule_tail (struct thread *prev) /* If the thread we switched from is dying, destroy its struct thread. This must happen late so that thread_exit() doesn't - pull out the rug under itself. */ - if (prev != NULL && prev->status == THREAD_DYING) + pull out the rug under itself. (We don't free + initial_thread because its memory was not obtained via + palloc().) */ + if (prev != NULL && prev->status == THREAD_DYING && prev != initial_thread) { ASSERT (prev != cur); - if (prev != initial_thread) - palloc_free_page (prev); + palloc_free_page (prev); } }