diff options
author | sotech117 <michael_foiani@brown.edu> | 2024-05-15 05:55:30 +0000 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2024-05-15 05:55:30 +0000 |
commit | 81905c31a0033ad447720cc1f36b8ef90be1a3ac (patch) | |
tree | f5f9d1324d0affc6fb54be570e2e2f342667c5c0 | |
parent | af9104c3e6b6693e0f5e39361048b572c7031794 (diff) |
add locks to fix some tests
-rw-r--r-- | kernel/fs/s5fs/s5fs.c | 2 | ||||
-rw-r--r-- | kernel/vm/shadow.c | 4 | ||||
-rw-r--r-- | kernel/vm/vmmap.c | 2 |
3 files changed, 8 insertions, 0 deletions
diff --git a/kernel/fs/s5fs/s5fs.c b/kernel/fs/s5fs/s5fs.c index 73ecaa6..dedadaf 100644 --- a/kernel/fs/s5fs/s5fs.c +++ b/kernel/fs/s5fs/s5fs.c @@ -403,7 +403,9 @@ static long s5fs_mmap(vnode_t *file, mobj_t **ret) // NOT_YET_IMPLEMENTED("VM: s5fs_mmap"); // Add a reference to the underlying mobj and return it + mobj_lock(&file->vn_mobj); mobj_ref(&file->vn_mobj); + mobj_unlock(&file->vn_mobj); *ret = &file->vn_mobj; return 0; } diff --git a/kernel/vm/shadow.c b/kernel/vm/shadow.c index 2f875d6..3194c5b 100644 --- a/kernel/vm/shadow.c +++ b/kernel/vm/shadow.c @@ -90,7 +90,9 @@ mobj_t *shadow_create(mobj_t *shadowed) } // init the other fields mobj_ref(so->shadowed); + mobj_lock(so->bottom_mobj); mobj_ref(so->bottom_mobj); + mobj_unlock(so->bottom_mobj); // init and lock the shadow object mobj_init(&so->mobj, MOBJ_SHADOW, &shadow_mobj_ops); @@ -118,6 +120,8 @@ void shadow_collapse(mobj_t *o) { // NOT_YET_IMPLEMENTED("VM: shadow_collapse"); + return; + mobj_shadow_t *so = MOBJ_TO_SO(o); mobj_t *next = so->shadowed; while(next && next->mo_type==MOBJ_SHADOW) diff --git a/kernel/vm/vmmap.c b/kernel/vm/vmmap.c index e301ac0..4d671d2 100644 --- a/kernel/vm/vmmap.c +++ b/kernel/vm/vmmap.c @@ -329,8 +329,10 @@ vmmap_t *vmmap_clone(vmmap_t *map) // If the vmarea is share-mapped if (vma->vma_flags & MAP_SHARED) { + mobj_lock(vma->vma_obj); new_vmarea->vma_obj = vma->vma_obj; mobj_ref(new_vmarea->vma_obj); + mobj_unlock(vma->vma_obj); } // If the vmarea is not share-mapped |