Destroy PT pages in addrspace_destroy().
authorBen Pfaff <blp@cs.stanford.edu>
Thu, 2 Sep 2004 23:28:07 +0000 (23:28 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 2 Sep 2004 23:28:07 +0000 (23:28 +0000)
src/threads/paging.c

index 2ae78c3c456cff3a63ae1ddf913db847864e2965..a86969b3290c1a946da5df37105be2aa731ddf34 100644 (file)
@@ -85,10 +85,26 @@ void
 pagedir_destroy (uint32_t *pd) 
 {
   void *kpage, *upage;
+  unsigned pde_idx;
 
+  /* Destroy user pages. */
   for (kpage = pagedir_first (pd, &upage); kpage != NULL;
        kpage = pagedir_next (pd, &upage)) 
     palloc_free (kpage);
+
+  /* Destroy page table pages. */
+  for (pde_idx = 0; pde_idx < pd_no (PHYS_BASE); pde_idx++) 
+    {
+      uint32_t pde = pd[pde_idx];
+
+      if (pde != 0) 
+        {
+          uint32_t *pt = pde_get_pt (pde);
+          palloc_free (pt);
+        }
+    }
+
+  /* Destroy page directory. */
   palloc_free (pd);
 }