From dfd21dfd36c509530a5613ae672e1bf4b2b548a9 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 18 Jul 2019 21:13:30 -0600 Subject: [PATCH] ihdad: Handle EOF --- ihdad/src/main.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ihdad/src/main.rs b/ihdad/src/main.rs index feba8a3680..d1f37307be 100755 --- a/ihdad/src/main.rs +++ b/ihdad/src/main.rs @@ -8,7 +8,7 @@ extern crate event; use std::{env, usize}; use std::fs::File; -use std::io::{Read, Write, Result}; +use std::io::{ErrorKind, Read, Write, Result}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use syscall::{PHYSMAP_NO_CACHE, PHYSMAP_WRITE, Packet, SchemeBlockMut}; use std::cell::RefCell; @@ -100,8 +100,14 @@ fn main() { event_queue.add(socket_fd, move |_event| -> Result> { loop { let mut packet = Packet::default(); - if socket_packet.borrow_mut().read(&mut packet)? == 0 { - break; + match socket_packet.borrow_mut().read(&mut packet) { + Ok(0) => return Ok(Some(0)), + Ok(_) => (), + Err(err) => if err.kind() == ErrorKind::WouldBlock { + break; + } else { + return Err(err); + } } if let Some(a) = device.borrow_mut().handle(&mut packet) { @@ -143,6 +149,10 @@ fn main() { //device_loop.borrow_mut().handle_interrupts(); } let event_count = event_queue.run().expect("IHDA: failed to handle events"); + if event_count == 0 { + //TODO: Handle todo + break; + } socket.borrow_mut().write(&Packet { id: 0,