From 4ec46ee786243898a10062ab65a9485a649c30db Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 20 May 2018 12:48:22 -0600 Subject: [PATCH] Send new flags to scheme --- src/event.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/event.rs b/src/event.rs index 063f59f..0fcf7b9 100644 --- a/src/event.rs +++ b/src/event.rs @@ -4,7 +4,7 @@ use core::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT}; use spin::{Once, RwLock, RwLockReadGuard, RwLockWriteGuard}; use context; -use scheme::SchemeId; +use scheme::{self, SchemeId}; use sync::WaitQueue; use syscall::data::Event; use syscall::error::{Error, Result, EBADF, ESRCH}; @@ -55,6 +55,8 @@ impl EventQueue { QueueKey { queue: self.id, id: event.id, data: event.data }, event.flags ); + + send_flags(RegKey { scheme, number })?; } Ok(events.len()) @@ -135,6 +137,29 @@ pub fn register(reg_key: RegKey, queue_key: QueueKey, flags: usize) { } } +pub fn send_flags(reg_key: RegKey) -> Result { + let mut flags = 0; + + { + let registry = registry(); + + if let Some(queue_list) = registry.get(®_key) { + for (_queue_key, queue_flags) in queue_list.iter() { + flags |= queue_flags; + } + } + } + + + let scheme = { + let schemes = scheme::schemes(); + let scheme = schemes.get(reg_key.scheme).ok_or(Error::new(EBADF))?; + Arc::clone(&scheme) + }; + + scheme.fevent(reg_key.number, flags) +} + pub fn unregister_file(scheme: SchemeId, number: usize) { let mut registry = registry_mut();