diff --git a/src/event.rs b/src/event.rs index dbe908f4e08fde38bcf0ded7f424d389b55479be..2e6cf9aed3ee705482dc102a5db8a63d2e7cd7ce 100644 --- a/src/event.rs +++ b/src/event.rs @@ -52,7 +52,10 @@ impl EventQueue { event.flags ); - send_flags(RegKey { scheme, number })?; + let flags = sync(RegKey { scheme, number })?; + if flags > 0 { + trigger(scheme, number, flags); + } } Ok(events.len()) @@ -133,7 +136,7 @@ pub fn register(reg_key: RegKey, queue_key: QueueKey, flags: usize) { } } -pub fn send_flags(reg_key: RegKey) -> Result<()> { +pub fn sync(reg_key: RegKey) -> Result<usize> { let mut flags = 0; { @@ -146,21 +149,13 @@ pub fn send_flags(reg_key: RegKey) -> Result<()> { } } - let event_id = { - 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)? + let scheme = { + let schemes = scheme::schemes(); + let scheme = schemes.get(reg_key.scheme).ok_or(Error::new(EBADF))?; + Arc::clone(&scheme) }; - if event_id != reg_key.number { - println!("scheme {} returned event id {} instead of {}", reg_key.scheme.into(), event_id, reg_key.number); - } - - Ok(()) + scheme.fevent(reg_key.number, flags) } pub fn unregister_file(scheme: SchemeId, number: usize) { diff --git a/src/scheme/debug.rs b/src/scheme/debug.rs index 35de9cc678d51a503a9468dc83e9c7b927c0b317..be93f99a1f508afe054a92f7f1763eac0c5899c3 100644 --- a/src/scheme/debug.rs +++ b/src/scheme/debug.rs @@ -108,7 +108,7 @@ impl Scheme for DebugScheme { *handles.get(&id).ok_or(Error::new(EBADF))? }; - Ok(id) + Ok(0) } fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> { diff --git a/src/scheme/irq.rs b/src/scheme/irq.rs index 3c61091a46d6ae5ccf7dc4fc8ad41366c0b3451c..bb359e185a1d466558e3ffc54d7b92cf42b5770a 100644 --- a/src/scheme/irq.rs +++ b/src/scheme/irq.rs @@ -88,7 +88,7 @@ impl Scheme for IrqScheme { } fn fevent(&self, file: usize, _flags: usize) -> Result<usize> { - Ok(file) + Ok(0) } fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> { diff --git a/src/scheme/itimer.rs b/src/scheme/itimer.rs index 2eaae08966dc868e402d85eed6eb33fe8449df83..53c48fd5683c5919a564102873f4d50191f53b5b 100644 --- a/src/scheme/itimer.rs +++ b/src/scheme/itimer.rs @@ -81,7 +81,7 @@ impl Scheme for ITimerScheme { fn fevent(&self, id: usize, _flags: usize) -> Result<usize> { let handles = self.handles.read(); - handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(id)) + handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(0)) } fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> { diff --git a/src/scheme/pipe.rs b/src/scheme/pipe.rs index 80451d017e8f38ab26ed2dc807b1eac9554bb624..8bb6ae76b8eea760209929d7c461ce1db8637854 100644 --- a/src/scheme/pipe.rs +++ b/src/scheme/pipe.rs @@ -166,7 +166,7 @@ impl PipeRead { } fn fevent(&self, _flags: usize) -> Result<usize> { - Ok(self.event_id) + Ok(0) } fn read(&self, buf: &mut [u8]) -> Result<usize> { diff --git a/src/scheme/time.rs b/src/scheme/time.rs index 7ec3a185f36fc337968021d789c5209457b07e25..bf5f73d951f76626bbc67f902771476fa7444c9b 100644 --- a/src/scheme/time.rs +++ b/src/scheme/time.rs @@ -92,7 +92,7 @@ impl Scheme for TimeScheme { fn fevent(&self, id: usize, _flags: usize) -> Result<usize> { let handles = self.handles.read(); - handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(id)) + handles.get(&id).ok_or(Error::new(EBADF)).and(Ok(0)) } fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> { diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 94785cdcc808def8e2b856776f114ded5da39c2c..65a0dd50a5e3c4640df8c2a4e20654b11cbf5ee2 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -207,7 +207,7 @@ impl UserInner { } pub fn fevent(&self, _flags: usize) -> Result<usize> { - Ok(self.handle_id) + Ok(0) } pub fn fsync(&self) -> Result<usize> {