fix: free frames instead of pages on pagedir_destroy

This commit is contained in:
2024-12-05 15:54:55 +00:00
parent 7f2e50a7d1
commit 7c8b0fa99a
3 changed files with 8 additions and 2 deletions

View File

@@ -6,6 +6,7 @@
#include "threads/pte.h"
#include "threads/palloc.h"
#ifdef VM
#include "threads/thread.h"
#include "vm/frame.h"
#include "vm/page.h"
#endif
@@ -46,7 +47,11 @@ pagedir_destroy (uint32_t *pd)
{
#ifdef VM
if (*pte & PTE_P)
frame_free (pte_get_page (*pte));
{
void *page = pte_get_page (*pte);
frame_owner_remove (page, thread_current ());
frame_free (page);
}
page_cleanup_swap (pte);
#else
if (*pte & PTE_P)

View File

@@ -208,7 +208,7 @@ frame_owner_remove (void *frame, struct thread *owner)
oe = list_next (oe);
if (frame_owner->thread == owner)
{
list_remove (oe);
list_remove (&frame_owner->elem);
free (frame_owner);
return;
}

View File

@@ -50,6 +50,7 @@ grow_stack (const void *addr)
if (!pagedir_set_page (t->pagedir, last_page, new_page, true))
{
frame_owner_remove (new_page, t);
frame_free (new_page);
return false;
}