diff options
| author | manuel <manuel@mausz.at> | 2012-06-21 20:06:48 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2012-06-21 20:06:48 +0200 |
| commit | 4fd6a30d164874fd660aacc36b44842e14bba208 (patch) | |
| tree | eac23c7483d4ad06ec11c154787b9cee698623cb /userprog | |
| parent | 5a6b07a186f9f3f718f312b6b9b365cb02da6556 (diff) | |
| download | progos-4fd6a30d164874fd660aacc36b44842e14bba208.tar.gz progos-4fd6a30d164874fd660aacc36b44842e14bba208.tar.bz2 progos-4fd6a30d164874fd660aacc36b44842e14bba208.zip | |
mark pages removed from page/mmap table as clear
Diffstat (limited to 'userprog')
| -rw-r--r-- | userprog/process.c | 10 |
1 files changed, 4 insertions, 6 deletions
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) | |||
| 129 | process->parent_tid = aux_data->parent_thread->tid; | 129 | process->parent_tid = aux_data->parent_thread->tid; |
| 130 | thread->process = process; | 130 | thread->process = process; |
| 131 | 131 | ||
| 132 | /* initialize page and mmap table */ | ||
| 132 | page_table_init (&thread->page_table); | 133 | page_table_init (&thread->page_table); |
| 133 | if (!mmap_table_init (&process->mmap_table)) | 134 | if (!mmap_table_init (&process->mmap_table)) |
| 134 | goto signal; | 135 | goto signal; |
| @@ -151,10 +152,9 @@ start_process (void *aux) | |||
| 151 | /* If process startup failed, quit. */ | 152 | /* If process startup failed, quit. */ |
| 152 | if (thread->process == NULL) { | 153 | if (thread->process == NULL) { |
| 153 | if (process != NULL) { | 154 | if (process != NULL) { |
| 155 | /* close/free memory mapped files and page table */ | ||
| 154 | /* close/free memory mapped files */ | 156 | /* close/free memory mapped files */ |
| 155 | mmap_table_free (&process->mmap_table); | 157 | mmap_table_free (&process->mmap_table); |
| 156 | |||
| 157 | /* free page table */ | ||
| 158 | page_table_free (&thread->page_table); | 158 | page_table_free (&thread->page_table); |
| 159 | 159 | ||
| 160 | if (process->fd_table.fds != NULL) | 160 | if (process->fd_table.fds != NULL) |
| @@ -240,8 +240,9 @@ process_exit (void) | |||
| 240 | lock_release (&filesys_lock); | 240 | lock_release (&filesys_lock); |
| 241 | } | 241 | } |
| 242 | 242 | ||
| 243 | /* close/free memory mapped files */ | 243 | /* close/free memory mapped files and page table */ |
| 244 | mmap_table_free (&proc->mmap_table); | 244 | mmap_table_free (&proc->mmap_table); |
| 245 | page_table_free (&thread->page_table); | ||
| 245 | 246 | ||
| 246 | int fd; | 247 | int fd; |
| 247 | for (fd = 2; fd <= proc->fd_table.fd_max; fd++) { | 248 | for (fd = 2; fd <= proc->fd_table.fd_max; fd++) { |
| @@ -265,9 +266,6 @@ process_exit (void) | |||
| 265 | pagedir_destroy (pd); | 266 | pagedir_destroy (pd); |
| 266 | } | 267 | } |
| 267 | 268 | ||
| 268 | /* free page table */ | ||
| 269 | page_table_free (&thread->page_table); | ||
| 270 | |||
| 271 | /* Destroy the process structure if the parent is not alive | 269 | /* Destroy the process structure if the parent is not alive |
| 272 | * any more. Atomic test and set would be sufficient here. | 270 | * any more. Atomic test and set would be sufficient here. |
| 273 | */ | 271 | */ |
