Index | Thread | Search

From:
Vitaliy Makkoveev <mvs@openbsd.org>
Subject:
Re: refcnt: Improve assertion on take
To:
Christian Ludwig <cludwig@genua.de>
Cc:
tech@openbsd.org
Date:
Tue, 20 May 2025 15:17:43 +0000

Download raw body.

Thread
On Tue, May 20, 2025 at 05:00:42PM +0200, Christian Ludwig wrote:
> Hi,
> 
> This is a resend of https://marc.info/?l=openbsd-tech&m=174043502604444
> from earlier this year. atomic_inc_int_nv() returns the incremented
> value. And you can only take a reference if you hold one already.
> 
> It passes regress. But more testers are welcome.
> 

Makes sense. I already pointed that current assertion will not be
triggered if we take reference on object with zero refs.

> 
>  - Christian
> 
> ---
>  sys/kern/kern_synch.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
> index 144283d005ac..08e7d165d1bd 100644
> --- a/sys/kern/kern_synch.c
> +++ b/sys/kern/kern_synch.c
> @@ -919,7 +919,7 @@ refcnt_take(struct refcnt *r)
>  	u_int refs;
>  
>  	refs = atomic_inc_int_nv(&r->r_refs);
> -	KASSERT(refs != 0);
> +	KASSERT(refs > 1);
>  	TRACEINDEX(refcnt, r->r_traceidx, r, refs - 1, +1);
>  	(void)refs;
>  }