diff options
author | sotech117 <michael_foiani@brown.edu> | 2024-05-15 05:24:03 +0000 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2024-05-15 05:24:03 +0000 |
commit | af9104c3e6b6693e0f5e39361048b572c7031794 (patch) | |
tree | 8e11986f5f6f696b69e59fc14302294c854cb08f | |
parent | fb007909e043f127794db39032492dc438ee2a4c (diff) |
fix collapse bug
-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); } } |