Update to new fevent
This commit is contained in:
+3
-5
@@ -52,11 +52,9 @@ fn main(){
|
||||
}
|
||||
|
||||
for (id, handle) in scheme.handles.iter_mut() {
|
||||
if let Some(count) = handle.fevent_count() {
|
||||
post_fevent(&mut socket, *id, syscall::EVENT_READ, count);
|
||||
}
|
||||
if handle.fevent_writable() {
|
||||
post_fevent(&mut socket, *id, syscall::EVENT_WRITE, 1);
|
||||
let events = handle.events();
|
||||
if events > 0 {
|
||||
post_fevent(&mut socket, *id, events, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
-13
@@ -98,29 +98,30 @@ impl Resource for PtyMaster {
|
||||
}
|
||||
}
|
||||
|
||||
fn fevent(&mut self) -> Result<()> {
|
||||
fn fevent(&mut self) -> Result<usize> {
|
||||
self.notified_read = false; // resend
|
||||
self.notified_write = false;
|
||||
Ok(())
|
||||
Ok(self.events())
|
||||
}
|
||||
|
||||
fn fevent_count(&mut self) -> Option<usize> {
|
||||
fn events(&mut self) -> usize {
|
||||
let mut events = 0;
|
||||
|
||||
let pty = self.pty.borrow();
|
||||
if let Some(data) = pty.miso.front() {
|
||||
if pty.miso.front().is_some() {
|
||||
if !self.notified_read {
|
||||
self.notified_read = true;
|
||||
Some(data.len())
|
||||
} else {
|
||||
None
|
||||
events |= syscall::EVENT_READ;
|
||||
}
|
||||
} else {
|
||||
self.notified_read = false;
|
||||
None
|
||||
}
|
||||
}
|
||||
fn fevent_writable(&mut self) -> bool {
|
||||
let notified = self.notified_write;
|
||||
self.notified_write = true;
|
||||
!notified
|
||||
|
||||
if ! self.notified_write {
|
||||
self.notified_write = true;
|
||||
events |= syscall::EVENT_WRITE;
|
||||
}
|
||||
|
||||
events
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -102,14 +102,11 @@ impl Resource for PtyPgrp {
|
||||
}
|
||||
}
|
||||
|
||||
fn fevent(&mut self) -> Result<()> {
|
||||
fn fevent(&mut self) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
fn fevent_count(&mut self) -> Option<usize> {
|
||||
None
|
||||
}
|
||||
fn fevent_writable(&mut self) -> bool {
|
||||
false
|
||||
fn events(&mut self) -> usize {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -15,7 +15,6 @@ pub trait Resource {
|
||||
fn write(&self, buf: &[u8]) -> Result<Option<usize>>;
|
||||
fn sync(&self) -> Result<usize>;
|
||||
fn fcntl(&mut self, cmd: usize, arg: usize) -> Result<usize>;
|
||||
fn fevent(&mut self) -> Result<()>;
|
||||
fn fevent_count(&mut self) -> Option<usize>;
|
||||
fn fevent_writable(&mut self) -> bool;
|
||||
fn fevent(&mut self) -> Result<usize>;
|
||||
fn events(&mut self) -> usize;
|
||||
}
|
||||
|
||||
+1
-1
@@ -99,7 +99,7 @@ impl SchemeBlockMut for PtyScheme {
|
||||
|
||||
fn fevent(&mut self, id: usize, _flags: usize) -> Result<Option<usize>> {
|
||||
let handle = self.handles.get_mut(&id).ok_or(Error::new(EBADF))?;
|
||||
handle.fevent().and(Ok(Some(id)))
|
||||
handle.fevent().map(Some)
|
||||
}
|
||||
|
||||
fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
|
||||
+14
-15
@@ -114,33 +114,32 @@ impl Resource for PtySlave {
|
||||
}
|
||||
}
|
||||
|
||||
fn fevent(&mut self) -> Result<()> {
|
||||
fn fevent(&mut self) -> Result<usize> {
|
||||
self.notified_read = false; // resend
|
||||
self.notified_write = false;
|
||||
Ok(())
|
||||
Ok(self.events())
|
||||
}
|
||||
|
||||
fn fevent_count(&mut self) -> Option<usize> {
|
||||
fn events(&mut self) -> usize {
|
||||
let mut events = 0;
|
||||
|
||||
if let Some(pty_lock) = self.pty.upgrade() {
|
||||
let pty = pty_lock.borrow();
|
||||
if let Some(data) = pty.mosi.front() {
|
||||
if pty.mosi.front().is_some() {
|
||||
if !self.notified_read {
|
||||
self.notified_read = true;
|
||||
Some(data.len())
|
||||
} else {
|
||||
None
|
||||
events |= syscall::EVENT_READ;
|
||||
}
|
||||
} else {
|
||||
self.notified_read = false;
|
||||
None
|
||||
}
|
||||
} else {
|
||||
Some(0)
|
||||
}
|
||||
}
|
||||
fn fevent_writable(&mut self) -> bool {
|
||||
let notified = self.notified_write;
|
||||
self.notified_write = true;
|
||||
!notified
|
||||
|
||||
if ! self.notified_write {
|
||||
self.notified_write = true;
|
||||
events |= syscall::EVENT_WRITE;
|
||||
}
|
||||
|
||||
events
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -92,14 +92,11 @@ impl Resource for PtyTermios {
|
||||
}
|
||||
}
|
||||
|
||||
fn fevent(&mut self) -> Result<()> {
|
||||
fn fevent(&mut self) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
fn fevent_count(&mut self) -> Option<usize> {
|
||||
None
|
||||
}
|
||||
fn fevent_writable(&mut self) -> bool {
|
||||
false
|
||||
fn events(&mut self) -> usize {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -92,14 +92,11 @@ impl Resource for PtyWinsize {
|
||||
}
|
||||
}
|
||||
|
||||
fn fevent(&mut self) -> Result<()> {
|
||||
fn fevent(&mut self) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
fn fevent_count(&mut self) -> Option<usize> {
|
||||
None
|
||||
}
|
||||
fn fevent_writable(&mut self) -> bool {
|
||||
false
|
||||
fn events(&mut self) -> usize {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user