HomeFreeBSD

MFC r354659

Description

MFC r354659

bhyve: rework mevent processing to fix a race condition

At the end of both mevent_add() and mevent_update(), mevent_notify()
is called to wakeup the I/O thread, that will call kevent(changelist)
to update the kernel.
A race condition is possible where the client calls mevent_add() and
mevent_update(EV_ENABLE) before the I/O thread has the chance to wake
up and call mevent_build()+kevent(changelist) in response to mevent_add().
The mevent_add() is therefore ignored by the I/O thread, and
kevent(fd, EV_ENABLE) is called before kevent(fd, EV_ADD), resuliting
in a failure of the kevent(fd, EV_ENABLE) call.

PR: 241808
Reviewed by: jhb, markj
Differential Revision: https://reviews.freebsd.org/D22286

Details

Provenance
vmaffioneAuthored on
Reviewer
jhb
Differential Revision
D22286: bhyve: rework mevent processing to fix a race condition
Parents
rS355116: MFC r354552, r354864
Branches
Unknown
Tags
Unknown