Messages in this thread | | | From | Andreas Hindborg <> | Subject | Re: [PATCH v1 1/2] rust: sync: add `Arc::ptr_eq` | Date | Tue, 23 May 2023 13:54:19 +0200 |
| |
Alice Ryhl <aliceryhl@google.com> writes:
> Add a method for comparing whether two `Arc` pointers reference the same > underlying object. > > This comparison can already be done by getting a reference to the inner > values and comparing whether the references have the same address. > However, writing `Arc::ptr_eq(a, b)` is generally less error-prone than > doing the same check on the references, since you might otherwise > accidentally compare the two `&Arc<T>` references instead, which wont > work because those are pointers to pointers to the inner value, when you > just want to compare the pointers to the inner value. > > Also, this method might optimize better because getting a reference to > the inner value involves offsetting the pointer, which this method does > not need to do. > > Co-developed-by: Wedson Almeida Filho <walmeida@microsoft.com> > Signed-off-by: Wedson Almeida Filho <walmeida@microsoft.com> > Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>
> --- > rust/kernel/sync/arc.rs | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs > index e6d206242465..274febe3bb06 100644 > --- a/rust/kernel/sync/arc.rs > +++ b/rust/kernel/sync/arc.rs > @@ -221,6 +221,11 @@ impl<T: ?Sized> Arc<T> { > // reference can be created. > unsafe { ArcBorrow::new(self.ptr) } > } > + > + /// Compare whether two [`Arc`] pointers reference the same underlying object. > + pub fn ptr_eq(this: &Self, other: &Self) -> bool { > + core::ptr::eq(this.ptr.as_ptr(), other.ptr.as_ptr()) > + } > } > > impl<T: 'static> ForeignOwnable for Arc<T> { > > base-commit: ac9a78681b921877518763ba0e89202254349d1b
| |