On Tue, Jul 18, 2023 at 11:55 AM Jacob Champion <jchamp...@timescale.com> wrote: > We're not setting EV_RECEIPT for these -- is that because none of the > filters we're using are EV_CLEAR, and so it doesn't matter if we > accidentally pull pending events off the queue during the kevent() call?
+1 for EV_RECEIPT ("just tell me about errors, don't drain any events"). I had a vague memory that it caused portability problems. Just checked... it was OpenBSD I was thinking of, but they finally added that flag in 6.2 (2017). Our older-than-that BF OpenBSD animal recently retired so that should be fine. (Yes, without EV_CLEAR it's "level triggered" not "edge triggered" in epoll terminology, so the way I had it was not broken, but the way you're suggesting would be nicer.) Note that you'll have to skip data == 0 (no error) too. + #ifdef HAVE_SYS_EVENT_H + /* macOS doesn't define the time unit macros, but uses milliseconds by default. */ + #ifndef NOTE_MSECONDS + #define NOTE_MSECONDS 0 + #endif + #endif While comparing the cousin OSs' man pages just now, I noticed that it's not only macOS that lacks NOTE_MSECONDS, it's also OpenBSD and NetBSD < 10. Maybe just delete that cruft ^^^ and use literal 0 in fflags directly. FreeBSD, and recently also NetBSD, decided to get fancy with high resolution timers, but 0 gets the traditional unit of milliseconds on all platforms (I just wrote it like that because I started from FreeBSD and didn't know the history/portability story).