[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 02/10] rust: qom: add reference counting functionality
From: |
Zhao Liu |
Subject: |
Re: [PATCH 02/10] rust: qom: add reference counting functionality |
Date: |
Wed, 5 Feb 2025 17:13:23 +0800 |
> > * The use of from():
> >
> > let clk = bindings::qdev_init_clock_in(...)
> > Owned::from(&*clk)
>
> In this case the C side wants to manage the reference that
> qdev_init_clock_in() returns; it is dropped in
> qdev_finalize_clocklist(). So Rust code needs to increase the
> refcount.
Pls forgive me for one more question about qdev_init_clock_in() on the C
side. :-)
qdev_init_clock_in() didn't unref `clk` after object_property_add_child(),
so it is intentional, to make the ref count of `clk` be 2:
* 1 count is held by clocklist until qdev_finalize_clocklist().
* another 1 is held by its parent via QOM Child<>.
Am I understanding it correctly?
> > Then the comment "the clock is heap allocated and does not have
> > a reference" sounds like a conflict. I'm sure I'm missing something. :-(
>
> Changed:
>
> // SAFETY: the clock is heap allocated, but qdev_init_clock_in()
> // does not gift the reference to its caller; so use Owned::from to
> // add one. the callback is disabled automatically when the clock
> // is unparented, which happens before the device is finalized.
LGTM.
Thank you very much for your patience. I think I understand ref count
now.
Regards,
Zhao