diff options
Diffstat (limited to 'kernel/vm/shadow.c')
-rw-r--r-- | kernel/vm/shadow.c | 6 |
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); } } |