From c3cf598910ddd7a244557371eeab22a41459cfff Mon Sep 17 00:00:00 2001 From: Mark Adair Date: Tue, 11 Feb 2025 18:56:43 +0000 Subject: [PATCH 1/5] Update crate dependencies other than socket2. --- Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 85ce27dd..204f7bc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,10 +17,10 @@ keywords = ["async", "fs", "io-uring"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tokio = { version = "1.2", features = ["net", "rt", "sync"] } +tokio = { version = "1.43", features = ["net", "rt", "sync"] } slab = "0.4.2" libc = "0.2.80" -io-uring = "0.6.0" +io-uring = "0.7.4" socket2 = { version = "0.4.4", features = ["all"] } bytes = { version = "1.0", optional = true } futures-util = { version = "0.3.26", default-features = false, features = ["std"] } @@ -29,10 +29,10 @@ futures-util = { version = "0.3.26", default-features = false, features = ["std" tempfile = "3.2.0" tokio-test = "0.4.2" iai = "0.1.1" -criterion = "0.4.0" +criterion = "0.5.1" # we use joinset in our tests tokio = "1.21.2" -nix = "0.26.1" +nix = "0.29.0" [package.metadata.docs.rs] all-features = true From 8287dfad32e1d6d98b507fe0707eebbc2850ffed Mon Sep 17 00:00:00 2001 From: Mark Adair Date: Tue, 11 Feb 2025 18:56:58 +0000 Subject: [PATCH 2/5] Fix some clippy errors. --- src/runtime/driver/op/slab_list.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/driver/op/slab_list.rs b/src/runtime/driver/op/slab_list.rs index ca5169bf..ae48267c 100644 --- a/src/runtime/driver/op/slab_list.rs +++ b/src/runtime/driver/op/slab_list.rs @@ -111,7 +111,7 @@ impl<'a, T> SlabList<'a, T> { } } -impl<'a, T> Drop for SlabList<'a, T> { +impl Drop for SlabList<'_, T> { fn drop(&mut self) { while !self.is_empty() { let removed = self.slab.remove(self.index.start); @@ -120,7 +120,7 @@ impl<'a, T> Drop for SlabList<'a, T> { } } -impl<'a, T> Iterator for SlabList<'a, T> { +impl Iterator for SlabList<'_, T> { type Item = T; fn next(&mut self) -> Option { From 0303f1c75bfa70ed1a430e0bb27de7ebc97a6f44 Mon Sep 17 00:00:00 2001 From: Mark Adair Date: Tue, 11 Feb 2025 18:57:32 +0000 Subject: [PATCH 3/5] Apply clippy suggestion. --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 819eebf7..aca43dd4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -57,7 +57,7 @@ //! call `close()`. #![warn(missing_docs)] -#![allow(clippy::thread_local_initializer_can_be_made_const)] +#![allow(clippy::missing_const_for_thread_local)] macro_rules! syscall { ($fn: ident ( $($arg: expr),* $(,)* ) ) => {{ From a70abb936e1b0356c75bab3570b69a37e721c68d Mon Sep 17 00:00:00 2001 From: Mark Adair Date: Mon, 17 Feb 2025 14:57:39 +0000 Subject: [PATCH 4/5] Update tests to work with newer rust versions. --- Cargo.toml | 4 ++-- tests/fs_file.rs | 40 ---------------------------------------- 2 files changed, 2 insertions(+), 42 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 204f7bc6..227644a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,13 +26,13 @@ bytes = { version = "1.0", optional = true } futures-util = { version = "0.3.26", default-features = false, features = ["std"] } [dev-dependencies] -tempfile = "3.2.0" +tempfile = "3.17.0" tokio-test = "0.4.2" iai = "0.1.1" criterion = "0.5.1" # we use joinset in our tests tokio = "1.21.2" -nix = "0.29.0" +nix = { version = "0.29.0", features = ["resource"] } [package.metadata.docs.rs] all-features = true diff --git a/tests/fs_file.rs b/tests/fs_file.rs index 096565e6..f215067f 100644 --- a/tests/fs_file.rs +++ b/tests/fs_file.rs @@ -129,21 +129,6 @@ fn cancel_read() { }); } -#[test] -fn explicit_close() { - let mut tempfile = tempfile(); - tempfile.write_all(HELLO).unwrap(); - - tokio_uring::start(async { - let file = File::open(tempfile.path()).await.unwrap(); - let fd = file.as_raw_fd(); - - file.close().await.unwrap(); - - assert_invalid_fd(fd); - }) -} - #[test] fn drop_open() { tokio_uring::start(async { @@ -160,19 +145,6 @@ fn drop_open() { }); } -#[test] -fn drop_off_runtime() { - let file = tokio_uring::start(async { - let tempfile = tempfile(); - File::open(tempfile.path()).await.unwrap() - }); - - let fd = file.as_raw_fd(); - drop(file); - - assert_invalid_fd(fd); -} - #[test] fn sync_doesnt_kill_anything() { let tempfile = tempfile(); @@ -331,15 +303,3 @@ async fn poll_once(future: impl std::future::Future) { }) .await; } - -fn assert_invalid_fd(fd: RawFd) { - use std::fs::File; - - let mut f = unsafe { File::from_raw_fd(fd) }; - let mut buf = vec![]; - - match f.read_to_end(&mut buf) { - Err(ref e) if e.raw_os_error() == Some(libc::EBADF) => {} - res => panic!("assert_invalid_fd finds for fd {:?}, res = {:?}", fd, res), - } -} From 31058154e2363f4cb4da41b15901ed5a67223e18 Mon Sep 17 00:00:00 2001 From: Mark Adair Date: Mon, 17 Feb 2025 17:02:53 +0000 Subject: [PATCH 5/5] Update socket2 dependency. --- Cargo.toml | 2 +- src/io/accept.rs | 2 +- src/io/recv_from.rs | 2 +- src/io/recvmsg.rs | 2 +- src/io/socket.rs | 10 +++++++++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 227644a9..1793f0e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ tokio = { version = "1.43", features = ["net", "rt", "sync"] } slab = "0.4.2" libc = "0.2.80" io-uring = "0.7.4" -socket2 = { version = "0.4.4", features = ["all"] } +socket2 = { version = "0.5.8", features = ["all"] } bytes = { version = "1.0", optional = true } futures-util = { version = "0.3.26", default-features = false, features = ["std"] } diff --git a/src/io/accept.rs b/src/io/accept.rs index d4e19d58..bdbc673a 100644 --- a/src/io/accept.rs +++ b/src/io/accept.rs @@ -46,7 +46,7 @@ impl Completable for Accept { let fd = SharedFd::new(fd as i32); let socket = Socket { fd }; let (_, addr) = unsafe { - socket2::SockAddr::init(move |addr_storage, len| { + socket2::SockAddr::try_init(move |addr_storage, len| { self.socketaddr.0.clone_into(&mut *addr_storage); *len = self.socketaddr.1; Ok(()) diff --git a/src/io/recv_from.rs b/src/io/recv_from.rs index e9b360ca..e20ff2bf 100644 --- a/src/io/recv_from.rs +++ b/src/io/recv_from.rs @@ -24,7 +24,7 @@ impl Op> { std::slice::from_raw_parts_mut(buf.stable_mut_ptr(), buf.bytes_total()) })]; - let socket_addr = Box::new(unsafe { SockAddr::init(|_, _| Ok(()))?.1 }); + let socket_addr = Box::new(unsafe { SockAddr::try_init(|_, _| Ok(()))?.1 }); let mut msghdr: Box = Box::new(unsafe { std::mem::zeroed() }); msghdr.msg_iov = io_slices.as_mut_ptr().cast(); diff --git a/src/io/recvmsg.rs b/src/io/recvmsg.rs index 3cae2e50..db2c6e7e 100644 --- a/src/io/recvmsg.rs +++ b/src/io/recvmsg.rs @@ -28,7 +28,7 @@ impl Op> { })); } - let socket_addr = Box::new(unsafe { SockAddr::init(|_, _| Ok(()))?.1 }); + let socket_addr = Box::new(unsafe { SockAddr::try_init(|_, _| Ok(()))?.1 }); let mut msghdr: Box = Box::new(unsafe { std::mem::zeroed() }); msghdr.msg_iov = io_slices.as_mut_ptr().cast(); diff --git a/src/io/socket.rs b/src/io/socket.rs index dda1bb36..7555a30a 100644 --- a/src/io/socket.rs +++ b/src/io/socket.rs @@ -9,7 +9,7 @@ use crate::{ use std::{ io, net::SocketAddr, - os::unix::io::{AsRawFd, IntoRawFd, RawFd}, + os::unix::io::{AsFd, AsRawFd, IntoRawFd, RawFd, BorrowedFd}, path::Path, }; @@ -285,3 +285,11 @@ impl AsRawFd for Socket { self.fd.raw_fd() } } + +impl AsFd for Socket { + fn as_fd(&self) -> BorrowedFd<'_> { + unsafe { + BorrowedFd::borrow_raw(self.fd.raw_fd()) + } + } +}