mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 13:50:11 +01:00
util: rust: update to rustix 1.0.7
Latest tagged release. Fedora uses it, and for it to work on Android we'll need to latest release so a pure libc backend can be used. Reviewed-by: Marcin Radomski <dextero@google.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35768>
This commit is contained in:
parent
5fbb3817ba
commit
8a2f43c9bd
4 changed files with 26 additions and 20 deletions
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
use std::io::IoSlice;
|
use std::io::IoSlice;
|
||||||
use std::io::IoSliceMut;
|
use std::io::IoSliceMut;
|
||||||
|
use std::mem::MaybeUninit;
|
||||||
use std::os::fd::AsFd;
|
use std::os::fd::AsFd;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
|
|
@ -10,8 +11,8 @@ use rustix::cmsg_space;
|
||||||
use rustix::fs::fcntl_setfl;
|
use rustix::fs::fcntl_setfl;
|
||||||
use rustix::fs::OFlags;
|
use rustix::fs::OFlags;
|
||||||
use rustix::net::accept;
|
use rustix::net::accept;
|
||||||
use rustix::net::bind_unix;
|
use rustix::net::bind;
|
||||||
use rustix::net::connect_unix;
|
use rustix::net::connect;
|
||||||
use rustix::net::listen;
|
use rustix::net::listen;
|
||||||
use rustix::net::recvmsg;
|
use rustix::net::recvmsg;
|
||||||
use rustix::net::sendmsg;
|
use rustix::net::sendmsg;
|
||||||
|
|
@ -58,7 +59,7 @@ impl Tube {
|
||||||
};
|
};
|
||||||
|
|
||||||
let unix_addr = SocketAddrUnix::new(path)?;
|
let unix_addr = SocketAddrUnix::new(path)?;
|
||||||
connect_unix(&socket, &unix_addr)?;
|
connect(&socket, &unix_addr)?;
|
||||||
|
|
||||||
Ok(Tube {
|
Ok(Tube {
|
||||||
socket: socket.into(),
|
socket: socket.into(),
|
||||||
|
|
@ -66,7 +67,7 @@ impl Tube {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send(&self, opaque_data: &[u8], descriptors: &[OwnedDescriptor]) -> MesaResult<usize> {
|
pub fn send(&self, opaque_data: &[u8], descriptors: &[OwnedDescriptor]) -> MesaResult<usize> {
|
||||||
let mut space = [0; cmsg_space!(ScmRights(MAX_IDENTIFIERS))];
|
let mut space = [MaybeUninit::<u8>::uninit(); cmsg_space!(ScmRights(MAX_IDENTIFIERS))];
|
||||||
let mut cmsg_buffer = SendAncillaryBuffer::new(&mut space);
|
let mut cmsg_buffer = SendAncillaryBuffer::new(&mut space);
|
||||||
|
|
||||||
let borrowed_fds: Vec<_> = descriptors.iter().map(AsFd::as_fd).collect();
|
let borrowed_fds: Vec<_> = descriptors.iter().map(AsFd::as_fd).collect();
|
||||||
|
|
@ -87,7 +88,7 @@ impl Tube {
|
||||||
pub fn receive(&self, opaque_data: &mut [u8]) -> MesaResult<(usize, Vec<OwnedDescriptor>)> {
|
pub fn receive(&self, opaque_data: &mut [u8]) -> MesaResult<(usize, Vec<OwnedDescriptor>)> {
|
||||||
let mut iovecs = [IoSliceMut::new(opaque_data)];
|
let mut iovecs = [IoSliceMut::new(opaque_data)];
|
||||||
|
|
||||||
let mut space = [0; cmsg_space!(ScmRights(MAX_IDENTIFIERS))];
|
let mut space = [MaybeUninit::<u8>::uninit(); cmsg_space!(ScmRights(MAX_IDENTIFIERS))];
|
||||||
let mut cmsg_buffer = RecvAncillaryBuffer::new(&mut space);
|
let mut cmsg_buffer = RecvAncillaryBuffer::new(&mut space);
|
||||||
let r = recvmsg(
|
let r = recvmsg(
|
||||||
&self.socket,
|
&self.socket,
|
||||||
|
|
@ -134,7 +135,7 @@ impl Listener {
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let unix_addr = SocketAddrUnix::new(path)?;
|
let unix_addr = SocketAddrUnix::new(path)?;
|
||||||
bind_unix(&socket, &unix_addr)?;
|
bind(&socket, &unix_addr)?;
|
||||||
listen(&socket, 128)?;
|
listen(&socket, 128)?;
|
||||||
|
|
||||||
fcntl_setfl(&socket, OFlags::NONBLOCK)?;
|
fcntl_setfl(&socket, OFlags::NONBLOCK)?;
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ use std::os::fd::OwnedFd;
|
||||||
|
|
||||||
use rustix::event::epoll;
|
use rustix::event::epoll;
|
||||||
use rustix::event::epoll::CreateFlags;
|
use rustix::event::epoll::CreateFlags;
|
||||||
|
use rustix::event::epoll::Event;
|
||||||
use rustix::event::epoll::EventData;
|
use rustix::event::epoll::EventData;
|
||||||
use rustix::event::epoll::EventFlags;
|
use rustix::event::epoll::EventFlags;
|
||||||
use rustix::event::epoll::EventVec;
|
use rustix::event::Timespec;
|
||||||
use rustix::io::Errno;
|
use rustix::io::Errno;
|
||||||
|
|
||||||
use crate::MesaResult;
|
use crate::MesaResult;
|
||||||
|
|
@ -37,20 +38,24 @@ impl WaitContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wait(&mut self, timeout: WaitTimeout) -> MesaResult<Vec<WaitEvent>> {
|
pub fn wait(&mut self, timeout: WaitTimeout) -> MesaResult<Vec<WaitEvent>> {
|
||||||
let mut event_vec = EventVec::with_capacity(WAIT_CONTEXT_MAX);
|
let mut events_buffer: [epoll::Event; WAIT_CONTEXT_MAX] = [Event {
|
||||||
let epoll_timeout = match timeout {
|
flags: EventFlags::IN,
|
||||||
WaitTimeout::Finite(duration) => duration.as_millis().try_into()?,
|
data: EventData::new_u64(0),
|
||||||
WaitTimeout::NoTimeout => -1,
|
}; WAIT_CONTEXT_MAX];
|
||||||
|
|
||||||
|
let epoll_timeout: Option<Timespec> = match timeout {
|
||||||
|
WaitTimeout::Finite(duration) => Some(duration.try_into()?),
|
||||||
|
WaitTimeout::NoTimeout => None, // Indefinite wait
|
||||||
};
|
};
|
||||||
|
|
||||||
loop {
|
let num_events = loop {
|
||||||
match epoll::wait(&self.epoll_ctx, &mut event_vec, epoll_timeout) {
|
match epoll::wait(&self.epoll_ctx, &mut events_buffer, epoll_timeout.as_ref()) {
|
||||||
Err(Errno::INTR) => (), // Continue loop on EINTR
|
Err(Errno::INTR) => (), // Continue loop on EINTR
|
||||||
result => break result?,
|
result => break result?,
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
let events = event_vec
|
let events = events_buffer[..num_events]
|
||||||
.iter()
|
.iter()
|
||||||
.map(|e| {
|
.map(|e| {
|
||||||
let flags: EventFlags = e.flags;
|
let flags: EventFlags = e.flags;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
project(
|
project(
|
||||||
'rustix',
|
'rustix',
|
||||||
'rust',
|
'rust',
|
||||||
version : '0.38.31',
|
version : '1.0.7',
|
||||||
license : 'Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT',
|
license : 'Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[wrap-file]
|
[wrap-file]
|
||||||
directory = rustix-0.38.31
|
directory = rustix-1.0.7
|
||||||
source_url = https://crates.io/api/v1/crates/rustix/0.38.31/download
|
source_url = https://crates.io/api/v1/crates/rustix/1.0.7/download
|
||||||
source_filename = rustix-0.38.31.tar.gz
|
source_filename = rustix-1.0.7.tar.gz
|
||||||
source_hash = 6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949
|
source_hash = c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266
|
||||||
patch_directory = rustix
|
patch_directory = rustix
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue