aboutsummaryrefslogtreecommitdiff
path: root/kernel/vm
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/vm')
-rw-r--r--kernel/vm/shadow.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/vm/shadow.c b/kernel/vm/shadow.c
index 77adef7..2f875d6 100644
--- a/kernel/vm/shadow.c
+++ b/kernel/vm/shadow.c
@@ -133,7 +133,7 @@ void shadow_collapse(mobj_t *o)
}
// migrate the pframes from o's shadowed object to o
- // mobj_lock(next); // lock before iterover
+ mobj_lock(next); // lock before iterover
list_iterate(&next->mo_pframes, pf, pframe_t, pf_link)
{
// see if shadow pframe is in the current shadow object
@@ -159,11 +159,13 @@ void shadow_collapse(mobj_t *o)
so->shadowed = MOBJ_TO_SO(next)->shadowed;
// update the refcounts
+ mobj_lock(so->shadowed);
mobj_ref(so->shadowed);
- mobj_put(&next); // "remove" the next
+ mobj_put_locked(&next); // "remove" the next
// update next for next iter, now that it's removed
next = so->shadowed;
+ mobj_unlock(next);
}
}