diff --git a/src/context/context.rs b/src/context/context.rs index 29ddc3af2f..958f5fefd4 100644 --- a/src/context/context.rs +++ b/src/context/context.rs @@ -1004,7 +1004,7 @@ pub fn bulk_add_fds( return Ok(0); } let current_lock = context::current(); - let mut current = current_lock.write(token.token()); + let mut current = current_lock.read(token.token()); let (current, mut token) = current.token_split(); let files: Vec = descriptions @@ -1048,7 +1048,7 @@ pub fn bulk_insert_fds( .read_usize()?; let current_lock = context::current(); - let mut current = current_lock.write(token.token()); + let mut current = current_lock.read(token.token()); let (current, mut token) = current.token_split(); if first_fd == usize::MAX { diff --git a/src/context/memory.rs b/src/context/memory.rs index 93446ba7a7..5a5b1cf51c 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -65,7 +65,7 @@ impl UnmapResult { }; let (scheme_id, number) = { - let desc = description.write(token.token()); + let desc = description.read(token.token()); (desc.scheme, desc.number) }; diff --git a/src/scheme/acpi.rs b/src/scheme/acpi.rs index 87570a1297..ab2c333440 100644 --- a/src/scheme/acpi.rs +++ b/src/scheme/acpi.rs @@ -181,8 +181,8 @@ impl KernelScheme for AcpiScheme { Ok(OpenResult::SchemeLocal(fd, int_flags)) } fn fsize(&self, id: usize, token: &mut CleanLockToken) -> Result { - let mut handles = HANDLES.write(token.token()); - let handle = handles.get_mut(id)?; + let mut handles = HANDLES.read(token.token()); + let handle = handles.get(id)?; if handle.stat { return Err(Error::new(EBADF)); diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs index 51d49a2d29..d45c8d2144 100644 --- a/src/scheme/proc.rs +++ b/src/scheme/proc.rs @@ -633,8 +633,8 @@ impl KernelScheme for ProcScheme { ) -> Result { // TODO: simplify let handle = { - let mut handles = HANDLES.write(token.token()); - let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?; + let mut handles = HANDLES.read(token.token()); + let handle = handles.get(&id).ok_or(Error::new(EBADF))?; handle.clone() }; @@ -667,8 +667,8 @@ impl KernelScheme for ProcScheme { // Don't hold a global lock during the context switch later on let handle = { - let mut handles = HANDLES.write(token.token()); - let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?; + let mut handles = HANDLES.read(token.token()); + let handle = handles.get(&id).ok_or(Error::new(EBADF))?; handle.clone() }; @@ -696,8 +696,8 @@ impl KernelScheme for ProcScheme { } fn fsize(&self, id: usize, token: &mut CleanLockToken) -> Result { - let mut handles = HANDLES.write(token.token()); - let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?; + let mut handles = HANDLES.read(token.token()); + let handle = handles.get(&id).ok_or(Error::new(EBADF))?; handle.fsize() } diff --git a/src/scheme/sys/mod.rs b/src/scheme/sys/mod.rs index 8f26187a79..f1501686d1 100644 --- a/src/scheme/sys/mod.rs +++ b/src/scheme/sys/mod.rs @@ -165,7 +165,7 @@ impl KernelScheme for SysScheme { if matches!(kind, Kind::Wr(_)) { return Ok(0); } - let is_data_none = data_lock.write(token.token()).is_none(); + let is_data_none = data_lock.read(token.token()).is_none(); if is_data_none { let new_data = kind.generate_data(token)?; let mut data_guard = data_lock.write(token.token()); @@ -218,7 +218,7 @@ impl KernelScheme for SysScheme { _ => return Err(Error::new(EBADF)), } }; - let is_data_none = data_lock.write(token.token()).is_none(); + let is_data_none = data_lock.read(token.token()).is_none(); if is_data_none { let new_data = kind.generate_data(token)?; let mut data_guard = data_lock.write(token.token()); @@ -296,7 +296,7 @@ impl KernelScheme for SysScheme { } }; let stat = if let Some((kind, data_lock)) = stat_base { - let is_data_none = data_lock.write(token.token()).is_none(); + let is_data_none = data_lock.read(token.token()).is_none(); if is_data_none { let new_data = kind.generate_data(token)?; let mut data_guard = data_lock.write(token.token()); diff --git a/src/syscall/fs.rs b/src/syscall/fs.rs index bf984641f4..259ef71ce9 100644 --- a/src/syscall/fs.rs +++ b/src/syscall/fs.rs @@ -441,7 +441,7 @@ pub fn fcntl(fd: FileHandle, cmd: usize, arg: usize, token: &mut CleanLockToken) .ok_or(Error::new(EBADF))?; let (scheme_id, number, flags) = { - let desc = file.description.write(token.token()); + let desc = file.description.read(token.token()); (desc.scheme, desc.number, desc.flags) };