summaryrefslogtreecommitdiff
path: root/src/kernel/ipc/shm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/ipc/shm.c')
-rw-r--r--src/kernel/ipc/shm.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/kernel/ipc/shm.c b/src/kernel/ipc/shm.c
index 1cdacfb..e760a0f 100644
--- a/src/kernel/ipc/shm.c
+++ b/src/kernel/ipc/shm.c
@@ -2,6 +2,7 @@
#include <mem/mem.h>
#include <mem/seg.h>
#include <task/task.h>
+#include <core/sys.h>
struct segment* shmseg_make(size_t len, struct process* owner) {
struct shmseg *ss = kmalloc(sizeof(struct shmseg));
@@ -29,8 +30,9 @@ struct segment_map *shmseg_map(struct segment *seg, struct page_directory *paged
void shmseg_unmap(struct segment_map *sm) {
size_t i;
- for (i = sm->start; i < sm->start + sm->len; i += 0x1000) {
- page_unmap(pagedir_getPage(sm->pagedir, i, 0));
+ for (i = 0; i < sm->len; i += 0x1000) {
+ struct page *page = pagedir_getPage(sm->pagedir, sm->start + i, 0);
+ if (page != 0) page_unmap(page);
}
}