diff options
author | Anton Kling <anton@kling.gg> | 2024-10-14 21:43:20 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-10-14 21:43:20 +0200 |
commit | 8913568be10385abdba07285162506a36827e16e (patch) | |
tree | 50ab2114680baf0395d6682e72a595c6d9aa9587 /kernel/sched/scheduler.c | |
parent | 87af93c7521be331a5794c6a53f31d13b3a24baa (diff) |
kernel: small bug fixes
Diffstat (limited to 'kernel/sched/scheduler.c')
-rw-r--r-- | kernel/sched/scheduler.c | 7 |
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; } |