tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: How to wait on cv_timedwait() correctly
> Date: Sat, 1 Feb 2025 18:03:41 +0100
> From: Stephan <stephanwib%googlemail.com@localhost>
>
> > By the way: Does khs->khs_waiters exist only as a micro-optimization
> > for the wakeup path?
> >
> > if (__predict_false(khs->khs_waiters))
> > cv_signal/broadcast(cv);
>
> The khs_waiters field of the structure is important when a semaphore
> is deleted.
>
> All threads waiting on it are notified and check the state of the
> semaphore.
OK, in that case you do have a good reason to maintain the khs_waiters
member and can't delete it altogether.
> If it was deleted, all threads unlock the mutex and just go away
> except the last one, which needs to call a function bringing the
> semaphore back to a free state.
>
> The whole code can be found here:
>
> https://github.com/stephanwib/src/blob/trunk/sys/kern/uipc_hsem.c
So you do have one case of the micro-optimization I suggested
ditching, in khsem_release:
231 if (khs->khs_waiters)
232 cv_signal(&khs->khs_cv);
https://github.com/stephanwib/src/blob/bf7fe621d136783c573db970f7135f690b361a28/sys/kern/uipc_hsem.c#L231-L232
You can just delete line 231 here.
> This API is very close to what is found on BeOS/Haiku and is of course
> part of my effort to make Haiku software run on NetBSD.
Cool! I wonder if we should consider having a compat_haiku.
Home |
Main Index |
Thread Index |
Old Index