Re: [PATCH v2 3/4] rust: devres: get rid of Devres' inner Arc
From: Danilo Krummrich
Date: Tue Jun 24 2025 - 11:36:38 EST
On Sun, Jun 22, 2025 at 06:54:07PM -0700, Boqun Feng wrote:
> I think you also need to mention that `inner` only remains valid until
> `inner.devm.complete_all()` unblocks `Devres::drop()`, because after
> `Devres::drop()`'s `devm.wait_for_completion()` returns, `inner` may be
> dropped or freed.
I think of it the other way around: The invariant guarantees that `inner` is
*always* valid.
The the `drop_in_place(inner)` call has to justify that it upholds this
invariant, by ensuring that at the time it is called no other code that accesses
`inner` can ever run.
Defining it the other way around would make the `inner()` accessor unsafe.