From 4fd6a30d164874fd660aacc36b44842e14bba208 Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 21 Jun 2012 20:06:48 +0200 Subject: mark pages removed from page/mmap table as clear --- userprog/process.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'userprog/process.c') diff --git a/userprog/process.c b/userprog/process.c index 80e327d..bf1a706 100644 --- a/userprog/process.c +++ b/userprog/process.c @@ -129,6 +129,7 @@ start_process (void *aux) process->parent_tid = aux_data->parent_thread->tid; thread->process = process; + /* initialize page and mmap table */ page_table_init (&thread->page_table); if (!mmap_table_init (&process->mmap_table)) goto signal; @@ -151,10 +152,9 @@ start_process (void *aux) /* If process startup failed, quit. */ if (thread->process == NULL) { if (process != NULL) { + /* close/free memory mapped files and page table */ /* close/free memory mapped files */ mmap_table_free (&process->mmap_table); - - /* free page table */ page_table_free (&thread->page_table); if (process->fd_table.fds != NULL) @@ -240,8 +240,9 @@ process_exit (void) lock_release (&filesys_lock); } - /* close/free memory mapped files */ + /* close/free memory mapped files and page table */ mmap_table_free (&proc->mmap_table); + page_table_free (&thread->page_table); int fd; for (fd = 2; fd <= proc->fd_table.fd_max; fd++) { @@ -265,9 +266,6 @@ process_exit (void) pagedir_destroy (pd); } - /* free page table */ - page_table_free (&thread->page_table); - /* Destroy the process structure if the parent is not alive * any more. Atomic test and set would be sufficient here. */ -- cgit v1.2.3