Add comment to explain why we don't free initial_thread.
authorBen Pfaff <blp@cs.stanford.edu>
Wed, 5 Apr 2006 19:25:49 +0000 (19:25 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Wed, 5 Apr 2006 19:25:49 +0000 (19:25 +0000)
Thanks to Sunit Pal <sunit@stanford.edu> for the question.

src/threads/thread.c

index 01e8ea42919913a8c5219221c01f52a38f5f1d3e..16b8c8b692e8664b81bab789eb3eeb946e38f3b7 100644 (file)
@@ -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);
     }
 }