From af5b43ca0b996d97d01ddb54874a0f0835b7c5b5 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Wed, 28 Sep 2016 11:22:01 -0600 Subject: [PATCH] Fix dup --- syscall/fs.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/syscall/fs.rs b/syscall/fs.rs index 20e6c92d..e79e4c0c 100644 --- a/syscall/fs.rs +++ b/syscall/fs.rs @@ -114,12 +114,22 @@ pub fn dup(fd: usize) -> Result<usize> { file }; - let scheme = { - let schemes = scheme::schemes(); - let scheme = schemes.get(file.scheme).ok_or(Error::new(EBADF))?; - scheme.clone() + let new_id = { + let scheme = { + let schemes = scheme::schemes(); + let scheme = schemes.get(file.scheme).ok_or(Error::new(EBADF))?; + scheme.clone() + }; + scheme.dup(file.number)? }; - scheme.dup(file.number) + + let contexts = context::contexts(); + let context_lock = contexts.current().ok_or(Error::new(ESRCH))?; + let context = context_lock.read(); + context.add_file(::context::file::File { + scheme: file.scheme, + number: new_id + }).ok_or(Error::new(EMFILE)) } /// Register events for file -- GitLab