About Social Code
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGurchetan Singh <gurchetansingh@google.com>2025-06-20 13:59:19 -0700
committerMarge Bot <marge-bot@fdo.invalid>2025-06-26 17:11:41 +0000
commit8a2f43c9bdc0ff8c25d82ed773d885377bb310af (patch)
tree9ef224b9122467dab708c8277aca3231b42b7497
parent5fbb3817ba71cbc479d0eb5e06f6800532eee7fa (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.rs13
-rw-r--r--src/util/rust/sys/linux/wait_context.rs23
-rw-r--r--subprojects/packagefiles/rustix/meson.build2
-rw-r--r--subprojects/rustix.wrap8
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