diff options
| author | Gurchetan Singh <gurchetansingh@google.com> | 2025-06-20 13:59:19 -0700 |
|---|---|---|
| committer | Marge Bot <marge-bot@fdo.invalid> | 2025-06-26 17:11:41 +0000 |
| commit | 8a2f43c9bdc0ff8c25d82ed773d885377bb310af (patch) | |
| tree | 9ef224b9122467dab708c8277aca3231b42b7497 | |
| parent | 5fbb3817ba71cbc479d0eb5e06f6800532eee7fa (diff) | |
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>
| -rw-r--r-- | src/util/rust/sys/linux/tube.rs | 13 | ||||
| -rw-r--r-- | src/util/rust/sys/linux/wait_context.rs | 23 | ||||
| -rw-r--r-- | subprojects/packagefiles/rustix/meson.build | 2 | ||||
| -rw-r--r-- | subprojects/rustix.wrap | 8 |
4 files changed, 26 insertions, 20 deletions
diff --git a/src/util/rust/sys/linux/tube.rs b/src/util/rust/sys/linux/tube.rs index 833e40286ab..a7e78af7d13 100644 --- a/src/util/rust/sys/linux/tube.rs +++ b/src/util/rust/sys/linux/tube.rs @@ -3,6 +3,7 @@ use std::io::IoSlice; use std::io::IoSliceMut; +use std::mem::MaybeUninit; use std::os::fd::AsFd; use std::path::Path; @@ -10,8 +11,8 @@ use rustix::cmsg_space; use rustix::fs::fcntl_setfl; use rustix::fs::OFlags; use rustix::net::accept; -use rustix::net::bind_unix; -use rustix::net::connect_unix; +use rustix::net::bind; +use rustix::net::connect; use rustix::net::listen; use rustix::net::recvmsg; use rustix::net::sendmsg; @@ -58,7 +59,7 @@ impl Tube { }; let unix_addr = SocketAddrUnix::new(path)?; - connect_unix(&socket, &unix_addr)?; + connect(&socket, &unix_addr)?; Ok(Tube { socket: socket.into(), @@ -66,7 +67,7 @@ impl Tube { } 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 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>)> { 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 r = recvmsg( &self.socket, @@ -134,7 +135,7 @@ impl Listener { )?; let unix_addr = SocketAddrUnix::new(path)?; - bind_unix(&socket, &unix_addr)?; + bind(&socket, &unix_addr)?; listen(&socket, 128)?; fcntl_setfl(&socket, OFlags::NONBLOCK)?; diff --git a/src/util/rust/sys/linux/wait_context.rs b/src/util/rust/sys/linux/wait_context.rs index 5f056dd2bf3..03f50b37aca 100644 --- a/src/util/rust/sys/linux/wait_context.rs +++ b/src/util/rust/sys/linux/wait_context.rs @@ -5,9 +5,10 @@ use std::os::fd::OwnedFd; use rustix::event::epoll; use rustix::event::epoll::CreateFlags; +use rustix::event::epoll::Event; use rustix::event::epoll::EventData; use rustix::event::epoll::EventFlags; -use rustix::event::epoll::EventVec; +use rustix::event::Timespec; use rustix::io::Errno; use crate::MesaResult; @@ -37,20 +38,24 @@ impl WaitContext { } pub fn wait(&mut self, timeout: WaitTimeout) -> MesaResult<Vec<WaitEvent>> { - let mut event_vec = EventVec::with_capacity(WAIT_CONTEXT_MAX); - let epoll_timeout = match timeout { - WaitTimeout::Finite(duration) => duration.as_millis().try_into()?, - WaitTimeout::NoTimeout => -1, + let mut events_buffer: [epoll::Event; WAIT_CONTEXT_MAX] = [Event { + flags: EventFlags::IN, + data: EventData::new_u64(0), + }; WAIT_CONTEXT_MAX]; + + let epoll_timeout: Option<Timespec> = match timeout { + WaitTimeout::Finite(duration) => Some(duration.try_into()?), + WaitTimeout::NoTimeout => None, // Indefinite wait }; - loop { - match epoll::wait(&self.epoll_ctx, &mut event_vec, epoll_timeout) { + let num_events = loop { + match epoll::wait(&self.epoll_ctx, &mut events_buffer, epoll_timeout.as_ref()) { Err(Errno::INTR) => (), // Continue loop on EINTR result => break result?, } - } + }; - let events = event_vec + let events = events_buffer[..num_events] .iter() .map(|e| { let flags: EventFlags = e.flags; diff --git a/subprojects/packagefiles/rustix/meson.build b/subprojects/packagefiles/rustix/meson.build index 9239c9c1038..acbcd1a877e 100644 --- a/subprojects/packagefiles/rustix/meson.build +++ b/subprojects/packagefiles/rustix/meson.build @@ -4,7 +4,7 @@ project( 'rustix', 'rust', - version : '0.38.31', + version : '1.0.7', license : 'Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT', ) diff --git a/subprojects/rustix.wrap b/subprojects/rustix.wrap index 7c5086d1d0e..80eb9efec30 100644 --- a/subprojects/rustix.wrap +++ b/subprojects/rustix.wrap @@ -1,6 +1,6 @@ [wrap-file] -directory = rustix-0.38.31 -source_url = https://crates.io/api/v1/crates/rustix/0.38.31/download -source_filename = rustix-0.38.31.tar.gz -source_hash = 6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949 +directory = rustix-1.0.7 +source_url = https://crates.io/api/v1/crates/rustix/1.0.7/download +source_filename = rustix-1.0.7.tar.gz +source_hash = c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266 patch_directory = rustix |