aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-05-15 05:24:03 +0000
committersotech117 <michael_foiani@brown.edu>2024-05-15 05:24:03 +0000
commitaf9104c3e6b6693e0f5e39361048b572c7031794 (patch)
tree8e11986f5f6f696b69e59fc14302294c854cb08f
parentfb007909e043f127794db39032492dc438ee2a4c (diff)
fix collapse bug
-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);
}
}