rust: sync: implement == operator for ARef

Rust Binder wants to perform a comparison between ARef<Task> and &Task,
so define the == operator for ARef<_> when compared with another ARef<_>
or just a reference. The operator is implemented in terms of the same
operator applied to the inner type.

Note that PartialEq<U> cannot be implemented because it would overlap
with the impl for ARef<U>.

Reviewed-by: Gary Guo <gary@garyguo.net>
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Link: https://patch.msgid.link/20260324-close-fd-check-current-v3-1-b94274bedac7@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Alice Ryhl 2026-03-24 20:02:35 +00:00 committed by Greg Kroah-Hartman
parent 5326a18e3e
commit 18e9fafb26
1 changed files with 22 additions and 0 deletions

View File

@ -170,3 +170,25 @@ fn drop(&mut self) {
unsafe { T::dec_ref(self.ptr) };
}
}
impl<T, U> PartialEq<ARef<U>> for ARef<T>
where
T: AlwaysRefCounted + PartialEq<U>,
U: AlwaysRefCounted,
{
#[inline]
fn eq(&self, other: &ARef<U>) -> bool {
T::eq(&**self, &**other)
}
}
impl<T: AlwaysRefCounted + Eq> Eq for ARef<T> {}
impl<T, U> PartialEq<&'_ U> for ARef<T>
where
T: AlwaysRefCounted + PartialEq<U>,
{
#[inline]
fn eq(&self, other: &&U) -> bool {
T::eq(&**self, other)
}
}