This allows printing macros to print the data and the refcount nubmer
of these struct for debugging purposes.
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
---
rust/kernel/sync/arc.rs | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
index 4d8de20c996f..f143d8305c36 100644
--- a/rust/kernel/sync/arc.rs
+++ b/rust/kernel/sync/arc.rs
@@ -474,6 +474,7 @@ impl<T: ?Sized> Deref for ArcBorrow<'_, T> {
///
/// # test().unwrap();
/// ```
+#[derive(Debug)]
pub struct UniqueArc<T: ?Sized> {
inner: Arc<T>,
}
@@ -545,3 +546,15 @@ impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
fmt::Display::fmt(self.deref(), f)
}
}
+
+impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
+ /// Formats debug output for [`Arc`].
+ ///
+ /// Refcount is also printed for debugging purpose.
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("Arc")
+ .field("refcount", &self.get_inner().count())
+ .field("data", &self.deref())
+ .finish()
+ }
+}
--
2.39.1
On Thu Feb 2, 2023 at 12:22 AM CET, Boqun Feng wrote:
> This allows printing macros to print the data and the refcount nubmer
> of these struct for debugging purposes.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> ---
Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> rust/kernel/sync/arc.rs | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> index 4d8de20c996f..f143d8305c36 100644
> --- a/rust/kernel/sync/arc.rs
> +++ b/rust/kernel/sync/arc.rs
> @@ -474,6 +474,7 @@ impl<T: ?Sized> Deref for ArcBorrow<'_, T> {
> ///
> /// # test().unwrap();
> /// ```
> +#[derive(Debug)]
> pub struct UniqueArc<T: ?Sized> {
> inner: Arc<T>,
> }
> @@ -545,3 +546,15 @@ impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
> fmt::Display::fmt(self.deref(), f)
> }
> }
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
> + /// Formats debug output for [`Arc`].
> + ///
> + /// Refcount is also printed for debugging purpose.
> + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> + f.debug_struct("Arc")
> + .field("refcount", &self.get_inner().count())
> + .field("data", &self.deref())
> + .finish()
> + }
> +}
> --
> 2.39.1
On Wed, 1 Feb 2023 15:22:43 -0800
Boqun Feng <boqun.feng@gmail.com> wrote:
> This allows printing macros to print the data and the refcount nubmer
> of these struct for debugging purposes.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> ---
> rust/kernel/sync/arc.rs | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> index 4d8de20c996f..f143d8305c36 100644
> --- a/rust/kernel/sync/arc.rs
> +++ b/rust/kernel/sync/arc.rs
> @@ -474,6 +474,7 @@ impl<T: ?Sized> Deref for ArcBorrow<'_, T> {
> ///
> /// # test().unwrap();
> /// ```
> +#[derive(Debug)]
I don't think this should be a `#[derive(Debug)]`. For `UniqueArc` the
refcount field in `Arc` is useless, and we should just delegate the
`Debug` impl to that of deref, just like `Display` does.
Best,
Gary
On Thu, Feb 02, 2023 at 02:28:04PM +0000, Gary Guo wrote:
> On Wed, 1 Feb 2023 15:22:43 -0800
> Boqun Feng <boqun.feng@gmail.com> wrote:
>
> > This allows printing macros to print the data and the refcount nubmer
> > of these struct for debugging purposes.
> >
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > ---
> > rust/kernel/sync/arc.rs | 13 +++++++++++++
> > 1 file changed, 13 insertions(+)
> >
> > diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> > index 4d8de20c996f..f143d8305c36 100644
> > --- a/rust/kernel/sync/arc.rs
> > +++ b/rust/kernel/sync/arc.rs
> > @@ -474,6 +474,7 @@ impl<T: ?Sized> Deref for ArcBorrow<'_, T> {
> > ///
> > /// # test().unwrap();
> > /// ```
> > +#[derive(Debug)]
>
> I don't think this should be a `#[derive(Debug)]`. For `UniqueArc` the
> refcount field in `Arc` is useless, and we should just delegate the
> `Debug` impl to that of deref, just like `Display` does.
>
I was just being lazy ;-) Will change this in v2.
Regards,
Boqun
> Best,
> Gary
© 2016 - 2026 Red Hat, Inc.