<html class="apple-mail-supports-explicit-dark-mode"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"></div><div dir="ltr">Btw, Go - which has a similar design to VT - on windows uses IO completion ports. It uses epoll on Linux and kqueue on OSX. </div><div dir="ltr"><br><blockquote type="cite">On Feb 11, 2026, at 2:50 PM, robert engels <robaho@me.com> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><meta http-equiv="content-type" content="text/html; charset=utf-8"><div dir="ltr"></div><div dir="ltr">I must be misunderstanding the bug because this section although it is using distinct poll descriptors (for read and write), it is also having multiple threads register for events at the same time - which seems racy to me.</div><div dir="ltr"><br></div><div dir="ltr">“<span style="caret-color: rgb(240, 246, 252); color: rgb(240, 246, 252); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; -webkit-text-size-adjust: 100%;"> Each epoll handle has a dedicated thread that runs epoll_wait in a loop, and schedules tasks to run in other threads in response to polled events.</span></div><p dir="auto" style="box-sizing: border-box; margin-top: 0px; margin-bottom: var(--base-size-16); caret-color: rgb(240, 246, 252); color: rgb(240, 246, 252); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; -webkit-text-size-adjust: 100%;"><b>Other threads</b> register interest ops with EPOLL_CTL_ADD, and when the event is polled, deregister interest with EPOLL_CTL_DEL. Any given socket handle can be registered at most once with each of the above epoll handles, once for reading, once for writing.”</p><p dir="auto" style="box-sizing: border-box; margin-top: 0px; margin-bottom: var(--base-size-16); caret-color: rgb(240, 246, 252); color: rgb(240, 246, 252); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; -webkit-text-size-adjust: 100%;"><br></p><p dir="auto" style="box-sizing: border-box; margin-top: 0px; margin-bottom: var(--base-size-16); caret-color: rgb(240, 246, 252); color: rgb(240, 246, 252); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; -webkit-text-size-adjust: 100%;"><br></p><div dir="ltr"><blockquote type="cite">On Feb 11, 2026, at 1:15 PM, Alan Bateman <alan.bateman@oracle.com> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><span>On 11/02/2026 18:52, robert engels wrote:</span><br><blockquote type="cite"><span>But the bug you linked as a potential candidate uses epoll directly. I only linked it because it discusses what sounds to be similar race results in starvation conditions.</span><br></blockquote><span>The issue that I think Matthew may be hitting arises when a Windows SOCKET that is registered for different I/O events with 2 AFD instances (think registered with a Read-Poller and Write-Poller at the same time). So very different to sharing epfd across threads or the edge triggered mode that the article is about.</span><br><span></span><br><span>-Alan</span><br></div></blockquote></div></blockquote></body></html>