kqueue: Fix missing wakeup
authorvisa <visa@openbsd.org>
Sun, 12 Jun 2022 10:34:36 +0000 (10:34 +0000)
committervisa <visa@openbsd.org>
Sun, 12 Jun 2022 10:34:36 +0000 (10:34 +0000)
commita26b930e92d7c8b0f65a8bb58d831bb5db99b57f
treeb6d4ecfb5e32f752d292898a930fc24a3b71acaf
parent3a6e416f6fdc94ed8cef24cfee3de4ba1f4df3db
kqueue: Fix missing wakeup

While one thread is running kqueue_scan(), another thread can begin
scanning the same kqueue, observe that the event queue is empty, and
go to sleep. If the first thread re-inserts a knote for re-processing,
the second thread can miss the newly pending event. Wake up the kqueue
after a re-insert to correct this.

This fixes a Go test hang that jsing@ tracked down to kqueue.

Tested in snaps for a week.

OK jsing@ mpi@
sys/kern/kern_event.c