mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-12-28 06:27:13 +00:00
sys_util: have Poller return token on POLLHUP
If POLLHUP is filtered out of the returned tokens, the caller of Poller::poll will likely just put the same (token, fd) in the next call to poll which will return instantly. This degrades into a busy poll loop without the chance for the caller to change the poll list. Instead, this change changes the filter to return tokens on POLLHUP so that the caller will hopefully notice the FD associated with the token has been hungup and will close it. BUG=chromium:816692 TEST=None Change-Id: Ie36d8a647a5fd7faabfd57a562205f75c77991e7 Reviewed-on: https://chromium-review.googlesource.com/985616 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Stephen Barber <smbarber@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
This commit is contained in:
parent
3afab33a8d
commit
1028f53ed2
1 changed files with 2 additions and 2 deletions
|
@ -16,7 +16,7 @@ use std::thread;
|
|||
use std::time::Duration;
|
||||
|
||||
use libc::{c_int, c_long, timespec, time_t, nfds_t, sigset_t, pollfd, syscall, SYS_ppoll, POLLIN,
|
||||
EPOLL_CLOEXEC, EPOLLIN, EPOLLHUP, EPOLL_CTL_ADD, EPOLL_CTL_MOD, EPOLL_CTL_DEL,
|
||||
POLLHUP, EPOLL_CLOEXEC, EPOLLIN, EPOLLHUP, EPOLL_CTL_ADD, EPOLL_CTL_MOD, EPOLL_CTL_DEL,
|
||||
epoll_create1, epoll_ctl, epoll_wait, epoll_event};
|
||||
|
||||
use {Result, errno_result};
|
||||
|
@ -140,7 +140,7 @@ impl Poller {
|
|||
|
||||
self.tokens.clear();
|
||||
for (pollfd, pollable) in self.pollfds.iter().zip(pollables.iter()) {
|
||||
if (pollfd.revents & POLLIN) != 0 {
|
||||
if (pollfd.revents & (POLLIN | POLLHUP)) != 0 {
|
||||
self.tokens.push(pollable.0);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue