linux: Use MaybeUninit buffer for epoll
This commit is contained in:
parent
d49490ce6a
commit
53a3fe41fc
1 changed files with 9 additions and 5 deletions
|
|
@ -14,14 +14,14 @@
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use rustix::{
|
use rustix::{
|
||||||
buffer::spare_capacity,
|
|
||||||
event::epoll::{self, EventData, EventFlags},
|
event::epoll::{self, EventData, EventFlags},
|
||||||
fd::{AsFd, BorrowedFd, OwnedFd},
|
fd::{AsFd, BorrowedFd, OwnedFd},
|
||||||
io::retry_on_intr,
|
io::Errno,
|
||||||
};
|
};
|
||||||
use slab::Slab;
|
use slab::Slab;
|
||||||
use std::{
|
use std::{
|
||||||
io,
|
io,
|
||||||
|
mem::MaybeUninit,
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
task::Waker,
|
task::Waker,
|
||||||
thread,
|
thread,
|
||||||
|
|
@ -88,10 +88,14 @@ pub(super) fn unregister_fd(fd: BorrowedFd) {
|
||||||
|
|
||||||
fn event_loop() {
|
fn event_loop() {
|
||||||
let epoll_fd = EPOLL_FD.get().unwrap();
|
let epoll_fd = EPOLL_FD.get().unwrap();
|
||||||
let mut event_list = Vec::with_capacity(4);
|
let mut event_buf = [MaybeUninit::<epoll::Event>::uninit(); 4];
|
||||||
loop {
|
loop {
|
||||||
retry_on_intr(|| epoll::wait(epoll_fd, spare_capacity(&mut event_list), None)).unwrap();
|
let events = match epoll::wait(epoll_fd, &mut event_buf, None) {
|
||||||
for event in &event_list {
|
Ok((events, _)) => events,
|
||||||
|
Err(Errno::INTR) => &mut [],
|
||||||
|
Err(e) => panic!("epoll::wait failed: {e}"),
|
||||||
|
};
|
||||||
|
for event in events {
|
||||||
match Tag::from_event_data(event.data) {
|
match Tag::from_event_data(event.data) {
|
||||||
Tag::Device(id) => Device::handle_usb_epoll(id),
|
Tag::Device(id) => Device::handle_usb_epoll(id),
|
||||||
Tag::Waker(id) => {
|
Tag::Waker(id) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue