summaryrefslogtreecommitdiff
path: root/kernel/sched/scheduler.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-10-14 21:43:20 +0200
committerAnton Kling <anton@kling.gg>2024-10-14 21:43:20 +0200
commit8913568be10385abdba07285162506a36827e16e (patch)
tree50ab2114680baf0395d6682e72a595c6d9aa9587 /kernel/sched/scheduler.c
parent87af93c7521be331a5794c6a53f31d13b3a24baa (diff)
kernel: small bug fixes
Diffstat (limited to 'kernel/sched/scheduler.c')
-rw-r--r--kernel/sched/scheduler.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c
index 9fec2b7..98df414 100644
--- a/kernel/sched/scheduler.c
+++ b/kernel/sched/scheduler.c
@@ -193,7 +193,7 @@ void free_process(process_t *p) {
continue;
}
MemoryMap *m = p->maps[i];
- mmu_remove_virtual_physical_address_mapping(m->u_address, m->length);
+ munmap(m->u_address, m->length);
}
list_free(&p->read_list);
@@ -660,6 +660,9 @@ int munmap(void *addr, size_t length) {
continue;
}
if (addr == m->u_address) {
+ assert(m->underlying_object->num_of_references > 0);
+ m->underlying_object->num_of_references--;
+ mmu_remove_virtual_physical_address_mapping(m->u_address, m->length);
current_task->maps[i] = NULL;
return 0;
}
@@ -722,5 +725,7 @@ void *mmap(void *addr, size_t length, int prot, int flags, int fd,
free_map->k_address = NULL;
free_map->length = length;
free_map->fd = fd;
+ free_map->underlying_object = vmobject;
+ vmobject->num_of_references++;
return rc;
}