I think we should also assert that no waiter remains when a conditional
variable is destroyed (which also suggests that the memory may be freed
shortly).  Otherwise we would either have modify after free or lost wakeups.

Cheers,
-- 
Xin LI <delp...@delphij.net>    https://www.delphij.net/
FreeBSD - The Power to Serve!           Live free or die
Index: sys/kern/kern_condvar.c
===================================================================
--- sys/kern/kern_condvar.c	(revision 283099)
+++ sys/kern/kern_condvar.c	(working copy)
@@ -77,6 +77,7 @@ cv_destroy(struct cv *cvp)
 #ifdef INVARIANTS
 	struct sleepqueue *sq;
 
+	KASSERT(cvp->cv_waiters == 0, ("%s: dangling waiters", __func__));
 	sleepq_lock(cvp);
 	sq = sleepq_lookup(cvp);
 	sleepq_release(cvp);

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to