Re: [PATCH 1/8] Introduce simple hazard pointers

From: Boqun Feng
Date: Wed Jun 25 2025 - 11:06:17 EST


On Wed, Jun 25, 2025 at 10:25:23AM -0400, Mathieu Desnoyers wrote:
> On 2025-06-24 23:10, Boqun Feng wrote:
> [...]
> > +
> > +static inline void shazptr_clear(struct shazptr_guard guard)
> > +{
> > + /* Only clear the slot when the outermost guard is released */
> > + if (likely(!guard.use_wildcard))
> > + smp_store_release(guard.slot, NULL); /* Pair with ACQUIRE at synchronize_shazptr() */
>
> How is the wildcard ever cleared ?
>

The outermost shazptr_guard will have .use_wildcard being false, so it
will clear the wildcard. E.g.

g1 = shazptr_acqure(a); // g1->use_wildcard is false
// this cpu's hazptr slot is 'a'.
g2 = shazptr_acqure(b); // g2->use_wildcard is true
// this cpu's hazptr slot becomes
// WILDCARD.

shazptr_clear(g2); // do nothing
shazptr_clear(g1); // clear this cpu's hazptr slot to NULL.

Regards,
Boqun

> Thanks,
>
> Mathieu
>
>
> --
> Mathieu Desnoyers
> EfficiOS Inc.
> https://www.efficios.com