On 10/23/26 8:34 AM, 이규영 wrote: > On 10/22/26 Ilya Maximets wrote: >> While the old code suggested that the select.poll() can be used as a >> drop-in replacement, it is not really the case, it seems. The problem >> is that a second select.poll.register() call overwrites the event >> flags for the file descriptor. So, if we first register for POLLOUT >> and then for POLLIN, then we will not actually wait for POLLOUT, which >> may be a problem on a congested connection where the application will >> never wake up to send if there is nothing to receive. >> >> We may need to have a separate class similar to the _SelectSelect to >> accumulate the flags and only actually register in the poll() call >> itself when we have all the event flags. >> >> WDYT? > > Thanks, Ilya, good catch, and thanks, Terry, for testing. > > You're right. With a bare select.poll, registering POLLOUT and then > POLLIN on the same fd leaves only POLLIN, and Idl.wait() does exactly > that when the jsonrpc connection has output pending: Session.wait() > ends up in send_wait() and Session.recv_wait() follows. I could > reproduce it with a socketpair: a Poller waiting for POLLOUT and then > POLLIN on the writable end, with a 2 second timer, sleeps the full 2 > seconds instead of waking up right away. > > I have a v4 ready with a small class that keeps the accumulated mask > per fd, the way poll_fd_wait() does in lib/poll-loop.c. It registers > the merged mask on every register() call rather than deferring it to > poll(). select.poll only builds the pollfd array when poll() is called, > so the result is the same and the class stays a bit simpler. Does that > work for you, or would you rather have it the other way? I'll send v4 > once we agree on it.
There is also another issue. The file descriptors are never actually unregistered, AFAICT. This may cause the poll() to error out on every call if the registered fd gets closed. The API doesn't expect the persistence. We may need to unregister all descriptors after each call... > > Terry, since the code changes, I won't carry your Acked-by and > Tested-by over to v4. The same problem is also in the workaround that > went into neutron, I'll fix it there as well. > > Best regards, > Kyuyeong _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
