From c06fcc3edafe8efefc90d2eff1b4b4a5489fb9eb Mon Sep 17 00:00:00 2001 From: Andrew Werner Date: Sat, 25 Nov 2023 12:09:23 -0500 Subject: [PATCH] maps/ringbuf: make RingBuf: Send + Sync There was no reason for them not to be -- the APIs all require mutable references and hold onto mutable references, so there cannot be internal concurrency. The !Send + !Sync came from the MMap, but not for any good reason. --- aya/src/maps/ring_buf.rs | 5 +++++ xtask/public-api/aya.txt | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/aya/src/maps/ring_buf.rs b/aya/src/maps/ring_buf.rs index 16f4c175..de7e138e 100644 --- a/aya/src/maps/ring_buf.rs +++ b/aya/src/maps/ring_buf.rs @@ -412,6 +412,11 @@ struct MMap { len: usize, } +// Needed because NonNull is !Send and !Sync out of caution that the data +// might be aliased unsafely. +unsafe impl Send for MMap {} +unsafe impl Sync for MMap {} + impl MMap { fn new( fd: BorrowedFd<'_>, diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index 196e0cec..ee691361 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -589,8 +589,8 @@ pub type aya::maps::ring_buf::RingBuf<&'a mut aya::maps::MapData>::Error = aya:: pub fn aya::maps::ring_buf::RingBuf<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl> std::os::fd::raw::AsRawFd for aya::maps::ring_buf::RingBuf pub fn aya::maps::ring_buf::RingBuf::as_raw_fd(&self) -> std::os::fd::raw::RawFd -impl !core::marker::Send for aya::maps::ring_buf::RingBuf -impl !core::marker::Sync for aya::maps::ring_buf::RingBuf +impl core::marker::Send for aya::maps::ring_buf::RingBuf where T: core::marker::Send +impl core::marker::Sync for aya::maps::ring_buf::RingBuf where T: core::marker::Sync impl core::marker::Unpin for aya::maps::ring_buf::RingBuf where T: core::marker::Unpin impl core::panic::unwind_safe::RefUnwindSafe for aya::maps::ring_buf::RingBuf where T: core::panic::unwind_safe::RefUnwindSafe impl core::panic::unwind_safe::UnwindSafe for aya::maps::ring_buf::RingBuf where T: core::panic::unwind_safe::UnwindSafe @@ -618,8 +618,8 @@ pub type aya::maps::ring_buf::RingBufItem<'_>::Target = [u8] pub fn aya::maps::ring_buf::RingBufItem<'_>::deref(&self) -> &Self::Target impl core::ops::drop::Drop for aya::maps::ring_buf::RingBufItem<'_> pub fn aya::maps::ring_buf::RingBufItem<'_>::drop(&mut self) -impl<'a> !core::marker::Send for aya::maps::ring_buf::RingBufItem<'a> -impl<'a> !core::marker::Sync for aya::maps::ring_buf::RingBufItem<'a> +impl<'a> core::marker::Send for aya::maps::ring_buf::RingBufItem<'a> +impl<'a> core::marker::Sync for aya::maps::ring_buf::RingBufItem<'a> impl<'a> core::marker::Unpin for aya::maps::ring_buf::RingBufItem<'a> impl<'a> core::panic::unwind_safe::RefUnwindSafe for aya::maps::ring_buf::RingBufItem<'a> impl<'a> !core::panic::unwind_safe::UnwindSafe for aya::maps::ring_buf::RingBufItem<'a> @@ -2077,8 +2077,8 @@ pub type aya::maps::ring_buf::RingBuf<&'a mut aya::maps::MapData>::Error = aya:: pub fn aya::maps::ring_buf::RingBuf<&'a mut aya::maps::MapData>::try_from(map: &'a mut aya::maps::Map) -> core::result::Result impl> std::os::fd::raw::AsRawFd for aya::maps::ring_buf::RingBuf pub fn aya::maps::ring_buf::RingBuf::as_raw_fd(&self) -> std::os::fd::raw::RawFd -impl !core::marker::Send for aya::maps::ring_buf::RingBuf -impl !core::marker::Sync for aya::maps::ring_buf::RingBuf +impl core::marker::Send for aya::maps::ring_buf::RingBuf where T: core::marker::Send +impl core::marker::Sync for aya::maps::ring_buf::RingBuf where T: core::marker::Sync impl core::marker::Unpin for aya::maps::ring_buf::RingBuf where T: core::marker::Unpin impl core::panic::unwind_safe::RefUnwindSafe for aya::maps::ring_buf::RingBuf where T: core::panic::unwind_safe::RefUnwindSafe impl core::panic::unwind_safe::UnwindSafe for aya::maps::ring_buf::RingBuf where T: core::panic::unwind_safe::UnwindSafe