Closed Enselic closed 1 year ago
Yeah, phantom data is no longer needed, as we switched to AtomicPtr a while ago. Let’s keep the explicit Send bound here — send/sync bounds are versus subtle here, so better to spell them out explicitly
Let me merge as is while I am at a laptop..
The effect of having
PhantomData<*mut Waiter>
is that theOnceCell<T>
stops beingimpl<T: Send> Send for OnceCell<T>
. But we want it to beimpl<T: Send> Send for OnceCell<T>
, because we manually mark it as such.By removing the
PhantomData
we can also remove the manualimpl Send
. The net effect is zero changes to the public API surface (including auto traits) ofonce_cell
:A variant of this PR is to remove the
PhantomData
but keep the manualimpl Send
. Maybe you prefer the explicitness.Background of this PR
I am studying how
once_cell
is implemented, and could not at first understand why we needed thePhantomData<*mut Waiter>
. Digging deeper, I concluded that we do not in fact need it.