Jesús Cea Avión <j...@jcea.es> added the comment:

First version of the patch. Review 0ee4386d8f51.diff 
http://bugs.python.org/file23526/0ee4386d8f51.diff

Details:

1. Current code aliases "devpoll" in platforms with "/dev/poll" (Solaris and 
derivatives). Considering all the other points, I think that providing a 
separate "select.devpoll" object would be a better idea. Opinions?.

2. I am not providing the exception contract documented in "select.poll". For 
instance, "poll.unregister" of a "fd" not previously registered doesn't raise 
an exception. Idem "poll.modify", etc. I could do it, but is pointless extra 
code.

3. I have added a boolean "select.isdevpoll" to indicate if "selec.poll" uses 
"poll()" or "/dev/poll". Ugly.

4. I release the GIL when waiting for the fds, but not when 
registering/unregistering fds, etc. I guess that the syscall would be very 
fast, but I haven't actually measure it.

5. The internal REMOVE is because if you "register" several times the same fd, 
the events are ORed. To avoid that I do an internal REMOVE first. I should scan 
the pollfds internally and update the events inplace. Or provide a separate 
"devpoll" and document this fact...

6. If the number of active fds is bigger that SIZE_DEVPOLL, only SIZE_DEVPOLL 
fds are returned. If you "poll" several times, you get the SAME fds, if they 
are still active. So, others active fds can suffer of starvation. Solutions: 
selftunning (if the module provide 20 slots and the OS provide 20 active fds, 
call again with 40 free slots, etc) or provide a separate "devpoll" and 
document this fact, posibly providing a "maxsize" parameter. "select.epoll" 
uses FD_SETSIZE, directly.

With this, I am starting to think that providing a separate "select.devpoll" is 
actually a better idea.

Opinions?.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue6397>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to