diff --git a/.travis.yml b/.travis.yml index f0aa93f157..c8caf483ad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -93,15 +93,9 @@ matrix: rust: 1.13.0 os: osx - # Testing beta on main targets + # Make sure stable is always working too - env: TARGET=x86_64-unknown-linux-gnu - rust: beta - - allow_failures: - # We allow beta to fail here because a bug might crop up in rust that causes it. We will - # however be on the lookout for this and file those bugs with upstream. - - env: TARGET=x86_64-unknown-linux-gnu - rust: beta + rust: stable before_install: set -e diff --git a/src/sys/epoll.rs b/src/sys/epoll.rs index 5ab766dcb9..5d63e82f6c 100644 --- a/src/sys/epoll.rs +++ b/src/sys/epoll.rs @@ -65,16 +65,6 @@ impl EpollEvent { } } -impl<'a> Into<&'a mut EpollEvent> for Option<&'a mut EpollEvent> { - #[inline] - fn into(self) -> &'a mut EpollEvent { - match self { - Some(epoll_event) => epoll_event, - None => unsafe { &mut *ptr::null_mut::() } - } - } -} - #[inline] pub fn epoll_create() -> Result { let res = unsafe { libc::epoll_create(1024) }; @@ -91,13 +81,19 @@ pub fn epoll_create1(flags: EpollCreateFlags) -> Result { #[inline] pub fn epoll_ctl<'a, T>(epfd: RawFd, op: EpollOp, fd: RawFd, event: T) -> Result<()> - where T: Into<&'a mut EpollEvent> + where T: Into> { - let event: &mut EpollEvent = event.into(); - if event as *const EpollEvent == ptr::null() && op != EpollOp::EpollCtlDel { + let mut event: Option<&mut EpollEvent> = event.into(); + if event.is_none() && op != EpollOp::EpollCtlDel { Err(Error::Sys(Errno::EINVAL)) } else { - let res = unsafe { libc::epoll_ctl(epfd, op as c_int, fd, &mut event.event) }; + let res = unsafe { + if let Some(ref mut event) = event { + libc::epoll_ctl(epfd, op as c_int, fd, &mut event.event) + } else { + libc::epoll_ctl(epfd, op as c_int, fd, ptr::null_mut()) + } + }; Errno::result(res).map(drop) } }