From a68d5a5237d4029f4a5f6887a620d7ccdc4d8439 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 28 Sep 2016 11:22:01 -0600 Subject: [PATCH] Fix dup --- kernel/syscall/fs.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/kernel/syscall/fs.rs b/kernel/syscall/fs.rs index 20e6c92de..e79e4c0c9 100644 --- a/kernel/syscall/fs.rs +++ b/kernel/syscall/fs.rs @@ -114,12 +114,22 @@ pub fn dup(fd: usize) -> Result { 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