man kevent(2) says:
> Cancellation can only occur before any changes are made to the kqueue, or when the call was blocked and no changes to the queue were requested.
> [EINTR] A cancellation request was delivered to the thread, but not yet handled.
> When kevent() call fails with EINTR error, all changes in the changelist have been applied.
I think that both these statements can't be true at the same time, because the first says that kevent() can be cancelled BEFORE changes are made, and the second says that changes are always applied when EINTR that could be result of cancellation.
Another possibility is that this manpage is just very unclear about EINTR behaviour.
I don't know what case is right one but I'm sure that there is something wrong here.