mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
rust: alloc: remove 'static bound on ForeignOwnable
The `'static` bound is currently necessary because there's no restriction on the lifetime of the GAT. Add a `Self: 'a` bound to restrict possible lifetimes on `Borrowed` and `BorrowedMut`, and lift the `'static` requirement. Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Gary Guo <gary@garyguo.net> Acked-by: Miguel Ojeda <ojeda@kernel.org> Link: https://patch.msgid.link/20260525202921.124698-3-dakr@kernel.org Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
e566a9e17f
commit
e9df918d61
|
|
@ -477,7 +477,7 @@ fn try_init<E>(init: impl Init<T, E>, flags: Flags) -> Result<Self, E>
|
|||
|
||||
// SAFETY: The pointer returned by `into_foreign` comes from a well aligned
|
||||
// pointer to `T` allocated by `A`.
|
||||
unsafe impl<T: 'static, A> ForeignOwnable for Box<T, A>
|
||||
unsafe impl<T, A> ForeignOwnable for Box<T, A>
|
||||
where
|
||||
A: Allocator,
|
||||
{
|
||||
|
|
@ -487,8 +487,14 @@ unsafe impl<T: 'static, A> ForeignOwnable for Box<T, A>
|
|||
core::mem::align_of::<T>()
|
||||
};
|
||||
|
||||
type Borrowed<'a> = &'a T;
|
||||
type BorrowedMut<'a> = &'a mut T;
|
||||
type Borrowed<'a>
|
||||
= &'a T
|
||||
where
|
||||
Self: 'a;
|
||||
type BorrowedMut<'a>
|
||||
= &'a mut T
|
||||
where
|
||||
Self: 'a;
|
||||
|
||||
fn into_foreign(self) -> *mut c_void {
|
||||
Box::into_raw(self).cast()
|
||||
|
|
@ -516,13 +522,19 @@ unsafe fn borrow_mut<'a>(ptr: *mut c_void) -> &'a mut T {
|
|||
|
||||
// SAFETY: The pointer returned by `into_foreign` comes from a well aligned
|
||||
// pointer to `T` allocated by `A`.
|
||||
unsafe impl<T: 'static, A> ForeignOwnable for Pin<Box<T, A>>
|
||||
unsafe impl<T, A> ForeignOwnable for Pin<Box<T, A>>
|
||||
where
|
||||
A: Allocator,
|
||||
{
|
||||
const FOREIGN_ALIGN: usize = <Box<T, A> as ForeignOwnable>::FOREIGN_ALIGN;
|
||||
type Borrowed<'a> = Pin<&'a T>;
|
||||
type BorrowedMut<'a> = Pin<&'a mut T>;
|
||||
type Borrowed<'a>
|
||||
= Pin<&'a T>
|
||||
where
|
||||
Self: 'a;
|
||||
type BorrowedMut<'a>
|
||||
= Pin<&'a mut T>
|
||||
where
|
||||
Self: 'a;
|
||||
|
||||
fn into_foreign(self) -> *mut c_void {
|
||||
// SAFETY: We are still treating the box as pinned.
|
||||
|
|
|
|||
|
|
@ -27,10 +27,14 @@ pub unsafe trait ForeignOwnable: Sized {
|
|||
const FOREIGN_ALIGN: usize;
|
||||
|
||||
/// Type used to immutably borrow a value that is currently foreign-owned.
|
||||
type Borrowed<'a>;
|
||||
type Borrowed<'a>
|
||||
where
|
||||
Self: 'a;
|
||||
|
||||
/// Type used to mutably borrow a value that is currently foreign-owned.
|
||||
type BorrowedMut<'a>;
|
||||
type BorrowedMut<'a>
|
||||
where
|
||||
Self: 'a;
|
||||
|
||||
/// Converts a Rust-owned object to a foreign-owned one.
|
||||
///
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user