summaryrefslogtreecommitdiff
path: root/src/sys/event.rs
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2015-09-20 15:05:55 +0200
committerCarl Lerche <me@carllerche.com>2015-09-28 14:35:06 -0700
commitc17d5b32a77e49bc2c53b21f25a7ebf9be607cba (patch)
tree5bf61bcd0fcc0579fa0020a28e116ace0a71d5a6 /src/sys/event.rs
parent5ef1f7acd3b325fc642aa4af6ff25a9dfd0ac618 (diff)
downloadnix-c17d5b32a77e49bc2c53b21f25a7ebf9be607cba.zip
sys/event: add kevent_ts to better expose kevent timeout
This allows to specify no timeout and allows to specify any timespec timeout.
Diffstat (limited to 'src/sys/event.rs')
-rw-r--r--src/sys/event.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/sys/event.rs b/src/sys/event.rs
index 23d8c679..d95b2107 100644
--- a/src/sys/event.rs
+++ b/src/sys/event.rs
@@ -5,6 +5,7 @@ use {Error, Result};
use errno::Errno;
use libc::{timespec, time_t, c_int, c_long, uintptr_t};
use std::os::unix::io::RawFd;
+use std::ptr;
pub use self::ffi::kevent as KEvent;
@@ -214,6 +215,13 @@ pub fn kevent(kq: RawFd,
tv_nsec: ((timeout_ms % 1000) * 1_000_000) as c_long
};
+ kevent_ts(kq, changelist, eventlist, Some(timeout))
+}
+
+pub fn kevent_ts(kq: RawFd,
+ changelist: &[KEvent],
+ eventlist: &mut [KEvent],
+ timeout_opt: Option<timespec>) -> Result<usize> {
let res = unsafe {
ffi::kevent(
kq,
@@ -221,7 +229,7 @@ pub fn kevent(kq: RawFd,
changelist.len() as c_int,
eventlist.as_mut_ptr(),
eventlist.len() as c_int,
- &timeout as *const timespec)
+ if let Some(ref timeout) = timeout_opt {timeout as *const timespec} else {ptr::null()})
};
if res < 0 {