Re: [PATCH v2 3/4] rust: devres: get rid of Devres' inner Arc

Danilo Krummrich
2025-06-24T15:18:30Z

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.