mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 06:58:22 +00:00
vmm: fix changemap
This commit is contained in:
+4
-2
@@ -411,10 +411,9 @@ static int changemap(vmmspace_t *space, void *address, size_t size, bool free, i
|
|||||||
size_t difference = (uintptr_t)RANGE_TOP(range) - (uintptr_t)address;
|
size_t difference = (uintptr_t)RANGE_TOP(range) - (uintptr_t)address;
|
||||||
range->size -= difference;
|
range->size -= difference;
|
||||||
|
|
||||||
rbtree = rbtree_successor(rbtree); // in case we insert a new mapping, get the next successor here already
|
|
||||||
|
|
||||||
if (free) {
|
if (free) {
|
||||||
destroyrange(range, range->size, difference, 0);
|
destroyrange(range, range->size, difference, 0);
|
||||||
|
rbtree = rbtree_successor(rbtree);
|
||||||
} else {
|
} else {
|
||||||
// create a new range for the changes
|
// create a new range for the changes
|
||||||
new_range->start = (void *)((uintptr_t)range->start + range->size);
|
new_range->start = (void *)((uintptr_t)range->start + range->size);
|
||||||
@@ -431,6 +430,9 @@ static int changemap(vmmspace_t *space, void *address, size_t size, bool free, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
insertrange(space, new_range);
|
insertrange(space, new_range);
|
||||||
|
|
||||||
|
rbtree = rbtree_successor(&new_range->rbtree_node);
|
||||||
|
|
||||||
new_range = allocrange();
|
new_range = allocrange();
|
||||||
if (new_range == NULL) {
|
if (new_range == NULL) {
|
||||||
error = ENOMEM;
|
error = ENOMEM;
|
||||||
|
|||||||
Reference in New Issue
Block a user