From eea72fcef3b616e9c1b3bd1cd18bc1ca0a991945 Mon Sep 17 00:00:00 2001 From: Egor Karavaev Date: Fri, 12 Jan 2018 22:10:46 +0300 Subject: [PATCH] Remove closed fd. --- src/smolnetd/scheme/netcfg.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/smolnetd/scheme/netcfg.rs b/src/smolnetd/scheme/netcfg.rs index d629431fac..22a7479a88 100644 --- a/src/smolnetd/scheme/netcfg.rs +++ b/src/smolnetd/scheme/netcfg.rs @@ -402,12 +402,13 @@ impl SchemeMut for NetCfgScheme { } fn close(&mut self, fd: usize) -> SyscallResult { - let file = self.files - .get_mut(&fd) - .ok_or_else(|| SyscallError::new(syscall::EBADF))?; - let value = - str::from_utf8(&file.write_buf).or_else(|_| Err(SyscallError::new(syscall::EINVAL)))?; - file.cfg_node.borrow().write(&value) + if let Some(file) = self.files.remove(&fd) { + let value = str::from_utf8(&file.write_buf) + .or_else(|_| Err(SyscallError::new(syscall::EINVAL)))?; + file.cfg_node.borrow().write(&value) + } else { + Err(SyscallError::new(syscall::EBADF)) + } } fn write(&mut self, fd: usize, buf: &[u8]) -> SyscallResult {